zoukankan      html  css  js  c++  java
  • Codeforces Round #394 (Div. 2)

      A题,水题,但是需要特判"0 0"因为至少至少走了一格= =。

      B题,水题,但是补题的时候n=1的情况没考虑(或者说写挫了)导致WA了一发。

      C题,数据小,可以直接暴力,用3个数组分别储存每一行变成3种类型的字符需要移动的最少位置。然后三个for来暴力枚举分别由这3行提供3种字符,更新答案即可。代码如下:

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <iostream>
     5 #include <map>
     6 using namespace std;
     7 const int N = 55;
     8 
     9 char s[N][N];
    10 int cnt[5];
    11 int get(char c)
    12 {
    13     if(c>='0' && c<='9') return 1;
    14     if(c>='a' && c<='z') return 2;
    15     return 3;
    16 }
    17 int a[N],b[N],c[N];
    18 
    19 int main()
    20 {
    21     int n,m;
    22     cin >> n >> m;
    23     for(int i=1;i<=n;i++)
    24     {
    25         scanf("%s",s[i]+1);
    26         a[i] = b[i] = c[i] = 1000;
    27         for(int j=1;j<=m;j++)
    28         {
    29             int now = get(s[i][j]);
    30             if(now == 1) a[i] = min(a[i], min(j-1, m-(j-1)));
    31             if(now == 2) b[i] = min(b[i], min(j-1, m-(j-1)));
    32             if(now == 3) c[i] = min(c[i], min(j-1, m-(j-1)));
    33         }
    34     }
    35     int ans = 1000;
    36     for(int i=1;i<=n;i++)
    37     {
    38         for(int j=1;j<=n;j++)
    39         {
    40             for(int k=1;k<=n;k++)
    41             {
    42                 if(i==j || i==k || j==k) continue;
    43                 ans = min(ans, a[i]+b[j]+c[k]);
    44             }
    45         }
    46     }
    47     cout << ans << endl;
    48     return 0;
    49 }
    C

      D题,水题。排序一下乱搞即可。

      E题,很有意思的题目。要注意的是dirx和diry数组必须按照顺序排好。详见代码:

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <iostream>
     5 #include <vector>
     6 using namespace std;
     7 const int N = 100000 + 5;
     8 typedef long long ll;
     9 
    10 int dirx[] = {0,-1,0,1};
    11 int diry[] = {1,0,-1,0};
    12 ll x[50],y[50];
    13 vector<int> G[50];
    14 void dfs(int u,int fa,ll now,int dir)
    15 {
    16     for(int i=0;i<G[u].size();i++)
    17     {
    18         int v = G[u][i];
    19         if(v == fa) continue;
    20         int k;
    21         for(k=0;k<4;k++)
    22         {
    23             if((dir & (1<<k)) == 0)
    24             {
    25                 dir |= (1<<k);
    26                 break;
    27             }
    28         }
    29         x[v] = x[u] + dirx[k] * now;
    30         y[v] = y[u] + diry[k] * now;
    31         dfs(v,u,now>>2,1<<(k+2)%4);
    32     }
    33 }
    34 
    35 int main()
    36 {
    37     int n;
    38     scanf("%d",&n);
    39     for(int i=1;i<n;i++)
    40     {
    41         int u,v; scanf("%d%d",&u,&v);
    42         G[u].push_back(v);
    43         G[v].push_back(u);
    44     }
    45     for(int i=1;i<=n;i++) if(G[i].size() > 4) return 0*puts("NO");
    46     puts("YES");
    47     dfs(1,-1,1LL<<58,0);
    48     for(int i=1;i<=n;i++) printf("%I64d %I64d
    ",x[i],y[i]);
    49     return 0;
    50 }
    E
  • 相关阅读:
    java 新建文件夹保存
    android AppWidgwtProvider学习
    GPS定位
    android ContentProvider学习
    Android 解屏幕锁与点亮屏幕(来电时效果)
    RecyclerView 分页滑动,设置可以滑动下一页,下一个item作为起点方法
    Glide 加载图片 到动态ImageView
    一个例子了解 HandlerThread,Looper,ThreadLocal,Handler,MessageQueue,Message的关系
    android TabLayout 相关
    屏幕相关
  • 原文地址:https://www.cnblogs.com/zzyDS/p/6365697.html
Copyright © 2011-2022 走看看