• 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:

    不会。

  • 相关阅读:
    Navicat Premium 最新激活码 12 免安装(不用注册码,不用注册机)
    Vs Code 2019软件安装教程及常用的入门设置
    (WinForm)FormBorderStyle属性
    背包的题后总结。
    123
    网络最大流——最高标号预流推进
    厉害的网站
    一般图最大匹配——带花树
    四边形不等式
    你好,OI
  • 原文地址:https://www.cnblogs.com/kane0526/p/3203613.html
Copyright © 2020-2023  润新知