zoukankan      html  css  js  c++  java
  • UPC2018组队训练赛第四场

    题目来自NAIPC2018


    D题:Missing Gnomes

    直接模拟

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 typedef long long ll;
     5 bool check[100050];
     6 int uncheck[100050];
     7 int op[100050];
     8 int ans[100050];
     9 int main()
    10 {
    11     int n,m;
    12     while(scanf("%d %d",&n,&m)!=EOF)
    13     {
    14         memset(check,0,sizeof(check));
    15         for(int i=1;i<=m;i++)
    16         {
    17             scanf("%d",&op[i]);
    18             check[op[i]]=1;
    19         }
    20         int k=1;
    21         for(int i=1;i<=n;i++)
    22         {
    23             if(check[i]==0)
    24             {
    25                 uncheck[k++]=i;
    26             }
    27         }
    28         k=1;
    29         for(int i=1;i<=m;i++)
    30         {
    31             if(op[i]>uncheck[k])
    32             {
    33                 while(op[i]>uncheck[k]&&k<=n-m)
    34                 {
    35                     printf("%d
    ",uncheck[k]);
    36                     k++;
    37                 }
    38             }
    39                 printf("%d
    ",op[i]);
    40         }
    41         for(;k<=n-m;k++)
    42         {
    43             printf("%d
    ",uncheck[k]);
    44         }
    45     }
    46     return 0;
    47 }
    View Code

    H题:Recovery

    输入两个字符串s,t分别代表行和列的状态(规定行或列中 1的个数为奇数 对应的是1,1的个数为偶数 对应的是0),求还原后的方阵。题目给出了两个条件:1、要求1的数量尽可能多;2、一次把每行接到上一行的后面,在条件1的前提下,使得衔接后的二进制数值最小(即让0尽量靠前)

    如果行和列中1的个数奇偶性不同,直接输出-1。对于可以还原的,先把可以需要放0的行和列存下来(记需要放0的行数为rr,列数为cc)。如果rr>=cc,首先在需要放0的行中按从小到大的顺序找到( rr-cc )个行把这些行的第一个变为0;其次对于剩下的行,按列从小到大的顺序相应的都变为0,其余的都为1。如果rr<cc,同理

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int mp[60][60],a[60],b[60],aa[60],bb[60];
     4 char s[60],t[60];
     5 int main()
     6 {
     7     while(scanf("%s%s",s,t)!=EOF)
     8     {
     9         int r=strlen(s),c=strlen(t);
    10         for(int i=0;i<r;i++)
    11             a[i]=s[i]-'0';
    12         for(int i=0;i<c;i++)
    13             b[i]=t[i]-'0';
    14         int rr=0,cc=0,cnt1=0,cnt2=0;
    15         for(int i=0;i<r;i++)
    16         {
    17             if(c&1){
    18                 if(!a[i])   aa[cnt1++]=i;
    19  
    20             }
    21             else{
    22                 if(a[i])    aa[cnt1++]=i;
    23             }
    24             rr+=a[i];
    25         }
    26         for(int i=0;i<c;i++)
    27         {
    28             if(r&1){
    29                 if(!b[i])   bb[cnt2++]=i;
    30             }
    31             else{
    32                 if(b[i])    bb[cnt2++]=i;
    33             }
    34             cc+=b[i];
    35         }
    36         if((rr+cc)&1)
    37         {
    38             printf("-1
    ");
    39             continue;
    40         }
    41         for(int i=0;i<r;i++)
    42             for(int j=0;j<c;j++)
    43                 mp[i][j]=1;
    44         if(cnt1<=cnt2)
    45         {
    46             for(int i=0;i<cnt2-cnt1;i++)
    47                 mp[0][bb[i]]=0;
    48             for(int i=cnt2-cnt1;i<cnt2;i++)
    49                 mp[aa[i-cnt2+cnt1]][bb[i]]=0;
    50         }
    51         else
    52         {
    53             for(int i=0;i<cnt1-cnt2;i++)
    54                 mp[aa[i]][0]=0;
    55             for(int i=cnt1-cnt2;i<cnt1;i++)
    56                 mp[aa[i]][bb[i-cnt1+cnt2]]=0;
    57         }
    58         for(int i=0;i<r;i++)
    59         {
    60             for(int j=0;j<c;j++)
    61                 printf("%d",mp[i][j]);
    62             printf("
    ");
    63         }
    64     }
    65     return 0;
    66 }
    67  
    View Code
    如有错误,请指正,感谢!
  • 相关阅读:
    Win10系列:VC++绘制几何图形3
    Win10系列:VC++绘制几何图形2
    二进制的编码
    win10下更新anaconda和pip源
    在win10上安装FFmpeg
    git设置代理模式,仅为github设置代理
    python3的pip3安装
    texlive2019安装
    ubuntu中安装python3和pip
    macbook安装win10
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9538532.html
Copyright © 2011-2022 走看看