• Codeforces Round #394 (Div. 2)


    前一半是刚刚打完比赛的时候写的……不知为啥手腕有点僵,估计是前一个小时用力过度了吧= =

    前四题看着还好,后两题就有点懵逼了……现在还不知道E题的题意到底是啥……

    不管了……还没找着官方题解,贴一下自己的做法算了……

    A显然是傻逼题啊……没注意到a,b都是0的情况,被hack了一次……

     1 #include<cstdio>
     2 using namespace std;
     3 int main(){
     4     int a,b;
     5     scanf("%d%d",&a,&b);
     6     if(a==0&&b==0)printf("NO");
     7     else{
     8         if(a>b){
     9             int t=a;
    10             a=b;
    11             b=t;
    12         }
    13         printf(b-a<=1?"YES":"NO");
    14     }
    15     return 0;
    16 }
    View Code

    B也是傻逼题,暴力判断就行……

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 bool judge();
     6 int n,m,a[100010],b[100010];
     7 int main(){
     8     bool ok=false;
     9     scanf("%d%d",&n,&m);
    10     for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    11     for(int i=1;i<=n;i++)scanf("%d",&b[i]);
    12     for(int i=0;i<n;i++){
    13         if(judge()){
    14             ok=true;
    15             break;
    16         }
    17         rotate(a+1,a+2,a+n+1);
    18     }
    19     printf(ok?"YES":"NO");
    20     return 0;
    21 }
    22 bool judge(){
    23     int tmp=(a[1]-b[1]+m)%m;
    24     for(int i=2;i<=n;i++)if((a[i]-b[i]+m)%m!=tmp)return false;
    25     return true;
    26 }
    View Code

    C也是傻逼题,枚举三种符号出现在哪三行,其余的行就不用动了。

    为了防止花式TLE我写了预处理代价……

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cctype>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxn=110;
     7 char s[maxn];
     8 int n,m,f[maxn][3],ans=0x3f3f3f3f;
     9 int main(){
    10     scanf("%d%d",&n,&m);
    11     memset(f,42,sizeof(f));
    12     for(int i=0;i<n;i++){
    13         scanf("%s",s);
    14         for(int j=0;j<m;j++){
    15             if(isdigit(s[j]))f[i][0]=min(f[i][0],min(j,m-j));
    16             else if(islower(s[j]))f[i][1]=min(f[i][1],min(j,m-j));
    17             else if(s[j]=='#'||s[j]=='*'||s[j]=='&')f[i][2]=min(f[i][2],min(j,m-j));
    18         }
    19     }
    20     for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(i!=j)for(int k=0;k<n;k++)if(i!=k&&j!=k)ans=min(ans,f[i][0]+f[j][1]+f[k][2]);
    21     printf("%d",ans);
    22     return 0;
    23 }
    View Code

    D也不难吧……看了看觉得就是按排名贪心,sort一下就好了……

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=100010;
     6 struct A{
     7     int x,pos;
     8     bool operator<(const A &a)const{return x<a.x;}
     9 }c[maxn];
    10 int n,a[maxn],b[maxn],l,r,last=-1e9+1;
    11 int main(){
    12     scanf("%d%d%d",&n,&l,&r);
    13     for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    14     for(int i=1;i<=n;i++){
    15         scanf("%d",&c[i].x);
    16         c[i].pos=i;
    17     }
    18     sort(c+1,c+n+1);
    19     bool ok=true;
    20     for(int i=1;i<=n;i++){
    21         b[c[i].pos]=max(l,last+a[c[i].pos]+1);
    22         last=b[c[i].pos]-a[c[i].pos];
    23         if(b[c[i].pos]>r){
    24             ok=false;
    25             break;
    26         }
    27     }
    28     if(ok)for(int i=1;i<=n;i++){
    29         if(i>1)printf(" ");
    30         printf("%d",b[i]);
    31     }
    32     else printf("-1");
    33     return 0;
    34 }
    View Code

    E听说主要考读题……药丸啊药丸

    我理解的题意是说所有边长度为1,边之间只能成直角或平角,问树是否可以画在平面上……

    反正n的范围这么小,找个重心之后求个bfs序,按bfs序暴搜……反正我过了Pretest,跑的还挺快……

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<vector>
     5 #include<queue>
     6 using namespace std;
     7 const int maxn=110,dx[]={0,0,-1,1},dy[]={-1,1,0,0};
     8 void getcenter(int);
     9 void dfs(int);
    10 vector<int>G[maxn];
    11 bool vis[maxn][maxn]={false};
    12 int size[maxn]={0},son[maxn]={0},id[maxn],tim=0;
    13 int n,center=0,x,y,du[maxn]={0},a[maxn],b[maxn],p[maxn];
    14 bool ok=false;
    15 int main(){
    16     scanf("%d",&n);
    17     for(int i=1;i<n;i++){
    18         scanf("%d%d",&x,&y);
    19         G[x].push_back(y);
    20         G[y].push_back(x);
    21         du[x]++;
    22         du[y]++;
    23     }
    24     bool bad=false;
    25     for(int i=1;i<=n;i++)if(du[i]>4){
    26         bad=true;
    27         break;
    28     }
    29     if(bad){
    30         printf("NO");
    31         return 0;
    32     }
    33     getcenter(1);
    34     x=center;
    35     getcenter(center);
    36     a[x]=b[x]=0;
    37     vis[50][50]=true;
    38     dfs(2);
    39     if(ok){
    40         printf("YES
    ");
    41         for(int i=1;i<=n;i++)printf("%d %d
    ",a[i],b[i]);
    42     }
    43     else printf("NO");
    44     return 0;
    45 }
    46 void getcenter(int x){
    47     queue<int>q;
    48     int tim=0;
    49     fill(p,p+n+1,0);
    50     q.push(x);
    51     while(!q.empty()){
    52         x=q.front();
    53         q.pop();
    54         id[++tim]=x;
    55         size[x]=1;
    56         for(int i=0;i<(int)G[x].size();i++)if(G[x][i]!=p[x]){
    57             p[G[x][i]]=x;
    58             q.push(G[x][i]);
    59         }
    60     }
    61     for(int i=n;i;i--){
    62         x=id[i];
    63         size[p[x]]+=size[x];
    64         if(size[x]>size[son[p[x]]])son[p[x]]=x;
    65     }
    66     for(int i=1;i<=n;i++){
    67         x=id[i];
    68         if(!center||max(n-size[x],size[son[x]])<max(n-size[center],size[son[center]]))center=x;
    69     }
    70 }
    71 void dfs(int k){
    72     if(k==n+1){
    73         ok=true;
    74         return;
    75     }
    76     register int x=id[k];
    77     for(int i=0;i<4;i++)if(!vis[a[p[x]]+dx[i]+50][b[p[x]]+dy[i]+50]){
    78         a[x]=a[p[x]]+dx[i];
    79         b[x]=b[p[x]]+dy[i];
    80         vis[a[x]+50][b[x]+50]=true;
    81         dfs(k+1);
    82         if(ok)return;
    83         vis[a[x]+50][b[x]+50]=false;
    84     }
    85 }
    View Code

    UPD:理解错了题意了…… 然后就WA了,英死早……

    话说这次的比赛不太资瓷啊……room老是炸,中间好不容易能看了,lock了C之后看别人的代码,看着看着突然发现有个傻小伙把m-j写成了n-j+1,火速造了个小数据,交上去之后也不知到底hack上了没有……

    本来做出来了四道题,然后因为CF的系统不太资瓷结果unrated了……不好玩……

  • 相关阅读:
    局域网无法访问vmware虚拟机WEB服务器解决办法
    zipimport.ZipImportError: can't decompress data; zlib not available 解决办法
    如何在win下使用linux命令
    《redisphp中文参考手册》php版
    Python关键字参数与非关键字参数(可变参数)详解
    Python与 PHP使用递归建立多层目录函数
    第一场个人图论专题
    poj_2762,弱连通
    word宏的问题
    fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/hzoier/p/6359692.html
Copyright © 2020-2023  润新知