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         else
36             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 }
posted on 2014-07-19 11:55  BMESwimming  阅读(218)  评论(0编辑  收藏  举报