Codeforces Round #192 (Div. 2)

吐槽一下,这次的CF好简单啊。 可是我为什么这么粗心这么大意这么弱。把心沉下来,想想你到底想做什么!

A

题意:O(-1)

思路:O(-1)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstring>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     string s[100];
11     int mp[100][100];
12     int n, m;
13     while(cin >> n >> m)
14     {
15         memset(mp,0,sizeof(mp));
16         for(int i=0; i<n; i++)
17             cin >> s[i];
18         for(int i=0; i<n; i++)
19         {
20             int cnt=0;
21             for(int j=0; j<m; j++)
22                 if(s[i][j]!='S') cnt++;
23             if(cnt==m)
24             {
25                 for(int j=0; j<m; j++) mp[i][j]=1;
26             }
27         }
28         for(int i=0; i<m; i++)
29         {
30             int cnt=0;
31             for(int j=0; j<n; j++)
32                 if(s[j][i]!='S') cnt++;
33             if(cnt==n)
34             {
35                 for(int j=0; j<n; j++) mp[j][i]=1;
36             }
37         }
38         int sum=0;
39         for(int i=0; i<n; i++)
40             for(int j=0; j<m; j++)
41              if(mp[i][j]) sum++;
42         cout << sum <<endl;
43     }
44 }
View Code

B

题意:有n个城市,然后给定m对城市不可建路,一个城市到另一个城市最多经过两条路,问你如何建路。

思路:两个城市之间的距离最多为2说明一条线上最多三个点,且有一点必须再所有三个点的中心。找出一个没有在不可连接的城市的点(因为0<M<N/2).

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <map>
 7 using namespace std;
 8 
 9 const int maxn=10024;
10 int que[2*maxn];
11 
12 int main()
13 {
14     int n, m;
15     while(cin >> n >> m)
16     {
17         map<int,int>mp;
18         int num=0;
19         for(int i=0; i<m; i++)
20         {
21             int u, v;
22             cin >>u >> v;
23             mp[u]=1;
24             mp[v]=1;
25         }
26         int tp;
27         for(int i=1; i<=n; i++)
28             if(!mp[i]) tp=i;
29         cout << n-1 <<endl;
30         for(int i=1; i<=n; i++)
31         {
32             if(i!=tp) cout << i << " " << tp <<endl;
33         }
34     }
35     return 0;
36 }
View Code

C

题意:O(-1)

思路:开始想复杂了,想成n皇后问题。其实这题想想也就很水的一题,对每行分析,每行能找出一个空点就是可行解,如果有一行找不到,就对每列找,每列能找到一个空点就是可行解。很水的一题,开始写成了N皇后问题,然后再源代码上改的,最后挂了,悲剧,为什么就懒这一些重新写两个for循环不就好了么,下次不能偷懒了。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstring>
 6 using namespace std;
 7 
 8 const int maxn=1100;
 9 int a[maxn][maxn], b[maxn]
10 string s[110];
11 
12 int main()
13 {
14     int n;
15     while(cin >> n)
16     {
17         for(int i=0; i<n; i++) cin >> s[i];
18         int top=0, flag=0;
19         for(int i=0; i<n; i++)
20             for(int j=0; j<n; j++)
21                 if(s[i][j]=='.')
22                 {
23                     top++;
24                     break;
25                 }
26         if(top==n)
27         {
28             flag=1;
29             for(int i=0; i<n; i++)
30             for(int j=0; j<n; j++)
31                 if(s[i][j]=='.')
32                 {
33                     cout << i+1 << " " << j+1 <<endl;
34                     break;
35                 }
36         }
37         top=0;
38         for(int j=0; j<n; j++)
39             for(int i=0; i<n; i++)
40                 if(s[i][j]=='.')
41                 {
42                     top++;
43                     break;
44                 }
45         if(top==n&&!flag)
46         {
47             flag=1;
48             for(int j=0; j<n; j++)
49             for(int i=0; i<n; i++)
50                 if(s[i][j]=='.')
51                 {
52                     cout << i+1 << " " << j+1 <<endl;
53                     break;
54                 }
55         }
56         if(!flag) puts("-1");
57     }
58     return 0;
59 }
60 /*
61 3
62 EEE
63 ...
64 ...
65 */
View Code

D:

题意:屌丝从起点S出发去终点E找女神,途中可能会遇见情敌,问屌丝最少能遇见几个情敌。

思路:开始看错了题,以为题目要求最少要遇见一个情敌,然后用了两次广搜,起点和终点分别搜一次。题目木有这么要求啊啊啊啊啊啊啊 O.O O.O O.O。

下次能再给我大意一点么!这题不用想得太复杂,不管这么走,屌丝和情敌都往女神那里走,情敌先到女神那里就一定能遇见屌丝然后干一架,从终点广搜一次就够了。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <queue>
 7 using namespace std;
 8 
 9 const int maxn=1024;
10 char map[1024][1024];
11 long long a[maxn][maxn],visit[maxn][maxn];
12 int n, m, si, sj, di, dj;
13 int dir[4][2]= {0,1,0,-1,1,0,-1,0};
14 
15 struct node
16 {
17     int x, y;
18     long long time;
19 } f[maxn*maxn];
20 
21 void bfs(int st, int sd)
22 {
23     queue<node>q;
24     memset(visit,0,sizeof(visit));
25     node s, p;
26     s.x=st, s.y=sd, s.time=0;
27     q.push(s);
28     while(!q.empty())
29     {
30         p=q.front();
31         q.pop();
32         for(int i=0; i<4; i++)
33         {
34             s.x=p.x+dir[i][0];
35             s.y=p.y+dir[i][1];
36             s.time=p.time+1;
37             if(1<=s.x&&s.x<=n&&1<=s.y&&s.y<=m&&map[s.x][s.y]!='T'&&!visit[s.x][s.y])
38             {
39                 visit[s.x][s.y]=1;
40                 a[s.x][s.y]=s.time;
41                 q.push(s);
42             }
43         }
44     }
45 }
46 
47 int main()
48 {
49     while(cin >> n >> m)
50     {
51         int num=0;
52         for(int i=1; i<=n; i++)
53         {
54             scanf("%s",map[i]+1);
55             for(int j=1; j<=m; j++)
56             {
57                 if(map[i][j]=='S') si=i, sj=j;
58                 else if(map[i][j]=='E') di=i, dj=j;
59                 else if('0'<map[i][j]&&map[i][j]<='9')
60                 {
61                     f[num].x=i;
62                     f[num].y=j;
63                     num++;
64                 }
65             }
66         }
67         memset(a,0,sizeof(a));
68         bfs(di,dj);
69         long long  sum=0;
70         for(int i=0; i<num; i++)
71         {
72             int x=f[i].x, y=f[i].y;
73             if(a[x][y]<=a[si][sj]&&a[x][y]) sum+=map[x][y]-'0';
74         }
75         cout << sum <<endl;
76     }
77     return 0;
78 }
View Code

E:

不会。

原文地址:https://www.cnblogs.com/kane0526/p/3203613.html