首页 > 代码库 > 2014CSUACM小组练习赛1
2014CSUACM小组练习赛1
就一道中文题,就先看这道,是一道迷宫题,BFS可以解答,路径输出部分正好昨天看最长公共子序列遇到到过。然后做题过程中发现好多人
都把第一题第二题做完了,这时候正好感觉D题有些代码量,就做A B,A题是水题,B题其实也是水题,一开始没看懂题,写了一大坨代码,结果
time limited!然后就沉下心去做D题,1A,继续看B题,同样还是time limited!然后时间就到了,结束重新看了一下题目才恍然大悟。
B题代码CodeForce 230A
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 const int maxn=1000+5; 5 int a[maxn],b[maxn],vis[maxn]; 6 int main() 7 { 8 int s,n; 9 while(scanf("%d%d",&s,&n)==2){10 for(int i=0;i<n;i++)11 scanf("%d%d",&a[i],&b[i]);12 memset(vis,0,sizeof(vis));13 for(int i=0;i<n;i++)14 for(int j=i+1;j<n;j++){15 if(a[i]>a[j]){16 int t1=a[i],t2=b[i];17 a[i]=a[j];18 a[j]=t1;19 b[i]=b[j];20 b[j]=t2;21 }22 }23 for(int i=0;i<n;i++){24 if(s>a[i] && !vis[i]){25 s+=b[i];26 vis[i]=1;27 }28 }29 int flag=1;30 for(int i=0;i<n;i++)31 if(!vis[i])32 flag=0;33 if(flag)34 printf("YES\n");35 else36 printf("NO\n");37 }38 return 0;39 }
下面附上D题BFS代码。POJ3984
1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 int maze[8][8],vis[8][8],foot[8][8]; 5 int dir[5][3]={{1,0},{0,-1},{-1,0},{0,1}}; 6 struct node{ 7 int xpos; 8 int ypos; 9 void init(int x,int y)10 {11 xpos=x;12 ypos=y;13 }14 }fa[30];15 void bfs(node source,node target)16 {17 vis[source.xpos][source.ypos]=1;18 std::queue<node>q;19 q.push(source);20 foot[0][0]=1;21 while(!q.empty()){22 node a=q.front();23 q.pop();24 for(int i=0;i<4;i++){25 int nx=a.xpos+dir[i][0];26 int ny=a.ypos+dir[i][1];27 if(nx<0 || ny<0 || nx>=5 || ny>=5)28 continue;29 if(nx==target.xpos && ny==target.ypos){30 node c;31 c.xpos=nx;32 c.ypos=ny;33 q.push(c);34 vis[nx][ny]=1;35 fa[nx*5+ny]=a;36 foot[nx][ny]=1;37 return;38 }39 if(maze[nx][ny])40 continue;41 if(vis[nx][ny])42 continue;43 node c;44 c.xpos=nx;45 c.ypos=ny;46 q.push(c);47 vis[nx][ny]=1;48 fa[nx*5+ny]=a;49 foot[nx][ny]=1;50 }51 }52 }53 void printfoot(int i,int j)54 {55 if(i==0 && j==0)56 return;57 if(foot[i][j]){58 node p=fa[i*5+j];59 int ni=p.xpos;60 int nj=p.ypos;61 printfoot(ni,nj);62 printf("(%d, %d)\n",i,j);63 }64 }65 int main()66 {67 while(scanf("%d",&maze[0][0])!=EOF){68 for(int i=0;i<5;i++)69 for(int j=0;j<5;j++){70 if(i==0 && j==0)71 continue;72 scanf("%d",&maze[i][j]);73 }74 memset(vis,0,sizeof(vis));75 memset(foot,0,sizeof(foot));76 node source,target;77 source.init(0,0);78 target.init(4,4);79 bfs(source,target);80 printf("(0, 0)\n");81 printfoot(4,4);82 }83 return 0;84 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。