当前位置: 首页 > article >正文

1/20赛后总结

1/20赛后总结

T1『讨论区管理员』的旅行 - BBC编程训练营

算法:IDA*

分数:0

damn it!

Ac_code走丢了~~(主要是没有写出来)~~

T2华强买瓜 - BBC编程训练营

算法:双向DFS或者DFS剪枝

分数:0

Ac_code:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[35],ans=INT_MAX;
unordered_map<int,int> mp;
//乘以2以避免除以2的问题
void dfs1(int step,int sum,int num){//从起始条件进行DFS(劈第1~n/2个瓜)
//step:劈到了第几个瓜、sum:劈了多少斤的瓜、num:劈了几个瓜
	if(step==n/2+1){
		if(mp.count(sum))mp[sum]=min(num,mp[sum]);//保证答案最优
		else mp[sum]=num;//记录答案
		return;
	}
	if(sum>m*2) return;//如果那的瓜过多,那就退出
	dfs1(step+1,sum+a[step]*2,num);//不劈直接拿
	dfs1(step+1,sum+a[step],num+1);//批了拿一半
	dfs1(step+1,sum,num);//不劈不拿
}
void dfs2(int step,int sum,int num){//从最终条件进行DFS(劈第n/2+1~n个瓜)
	if(mp.count(m*2-sum)!=0/*两边的DFS的和可行就纪录*/)ans=min(ans,num+mp[m*2-sum]);//答案可行就记录
	if(step==n+1/*如果打算劈n+1个瓜时退出*/||num>ans/*如果答案不够优就不再进行*/)return;
	dfs2(step+1,sum+a[step]*2,num);//不劈直接拿
	dfs2(step+1,sum+a[step],num+1);//批了拿一半
	dfs2(step+1,sum,num);//不劈不拿
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1);
	dfs1(1,0,0);//从起始条件进行DFS(劈第1~n/2个瓜)
	dfs2(n/2+1,0,0);//从最终条件进行DFS(劈第n/2+1~n个瓜)
	if(ans==INT_MAX)cout<<"Huaqiang is about to strike you !";
	else cout<<ans;
	return 0;
}

T3花花的桃花源记 - BBC编程训练营

算法:BFS优化

分数:0

Ac_code:

#include<bits/stdc++.h>
using namespace std;
struct node {
	int x,y;
	int t;
	int l;//是否拥有举世无双HJM很剑 
} st,ed;
bool operator <(node x,node y) {
	return x.t>y.t;
}
priority_queue<node>q;
int n,m;
char a[1005][1005];
int dx[5]= {0,0,0,1,-1};
int dy[5]= {0,1,-1,0,0};
int vis[1005][1005][2];
int chuan[2];
void check(node v){
	if(vis[v.x][v.y][v.l]>v.t){//保证出现在队列过的是最优解 
		vis[v.x][v.y][v.l]=v.t; 
		q.push(v);//放入队列 
	}
}
void jian(node v){
	if(chuan[v.l])	return ;
	chuan[v.l]=1;//在有举世无双HJM很剑和没举世无双HJM很剑时,只要传送一次就是最优的 
	v.t+=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++) {
			if(a[i][j]!='X') continue;//不是间隙就不传送
			check({i,j,v.t,v.l});//如果是间隙,那检查传送时是否最优 
		}
	}
}
int bfs() {
	q.push({st.x,st.y,0,0});
	while(!q.empty()) {
		node t=q.top();
		q.pop();
		if(t.x==ed.x&&t.y==ed.y)	return t.t;//到达祭台 
		for(int i=1; i<=4; i++) {
			int nx=dx[i]+t.x;
			int ny=dy[i]+t.y;
            //向四个方向扩展 
			if(nx<1||ny<1||nx>n||ny>m)	continue;//判断是否出界
			node v=t;
			v.x=nx,v.y=ny;
			char ta=a[nx][ny];
			if(ta=='0'){//空地 
				v.t+=1;
				check(v);
			}
			else if(ta=='1'){//墙 
				if(v.l==1){//有剑
					a[nx][ny]=0;
					v.t+=1;
					check(v);
				}	
			}
			else if(ta=='2'){//Ultra怪(不用考虑是否会再生)
				if(v.l==1)	v.t+=1;
				else v.t+=3;
				check(v);
			}
			else if(ta=='3'){//Super怪 
				if(v.l==1)	v.t+=1;
				else v.t+=11;
				check(v);
			}
			else if(ta=='4'){//举世无双HJM很剑 
				v.t+=1;
				check(v);
				if(!v.l) v.l=1,v.t+=4;
				check(v);
			}
			else if(ta=='5'){//栈道 
				if(v.l==0){
					v.t+=1;
					check(v);
				}
			}
			else if(ta=='X'){//间隙 
				v.t+=1;
				check(v);
				jian(v);
			}
		}
	}
	return -1;
	
}
void solve() {
	while(!q.empty())	q.pop();//清空队列
	memset(vis,0,sizeof vis);
	memset(a,0,sizeof a);
	memset(chuan,0,sizeof chuan);
	memset(vis,0x3f,sizeof vis);//求最小值,故memset为0x3f3f3f3f
    //多测不清空,亲人两行泪 
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		char ch=getchar();
		for(int j=1; j<=m; j++) {
			a[i][j]=getchar();
			if(a[i][j]=='S')	st.x=i,st.y=j,a[i][j]='0';//起点可多次经过 
			else if(a[i][j]=='E')	ed.x=i,ed.y=j,a[i][j]='0'; 
		}
	}
	int tmp=bfs();
	if(tmp!=-1)	cout<<tmp<<endl; 
	else cout<<"Maybe Next Time"<<endl;
}
int main(){
	int T;
	cin>>T;
	while(T--)		solve();
	return 0;
}

T4Squars - BBC编程训练营

算法:DFS剪枝

分数:33(骗的)

Ac_code走丢啦(主要是写不出来


http://www.kler.cn/a/513451.html

相关文章:

  • (undone) 并行计算学习 (Day2: 什么是 “伪共享” ?)
  • 微信小程序中实现背景图片完全覆盖显示,可以通过设置CSS样式来实现
  • 【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】
  • 在线宠物用品|基于vue的在线宠物用品交易网站(源码+数据库+文档)
  • 第3章:Python TDD更新测试用例测试Dollar类
  • Apache Hive--排序函数解析
  • 22. C语言 输入与输出详解
  • 云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?
  • docker load报错(unexpected EOF)
  • 深入解析 Spring 框架中的事务传播行为
  • 视频修复最强算法 部署笔记2025
  • Java面试专题——面向对象
  • JavaScript中的数据类型以及存储上的差别
  • Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )
  • 深入探究分布式日志系统 Graylog:架构、部署与优化
  • 自动化标注平台开源,基于 yolov8标注平台可本地部署
  • AI 赋能:开启人类 “长生不老” 新纪元?
  • 2025发文新方向:AI+量化 人工智能与金融完美融合!
  • #HarmonyOs篇: 管理应用拥有的状态LocalStorage AppStorage
  • 【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项
  • 从指令角度看函数调用堆栈过程
  • CSDN年度回顾:技术征途上的坚实步伐
  • 路由器缓冲区如何调节的指南说明
  • k8s namespace绑定节点
  • MongoDB的索引与聚合
  • STM32G4xx系列boot0复用为IO注意事项