zoukankan      html  css  js  c++  java
  • 2017-10-04-morning

    改题面只有1改为0 。。

      1 #include <cstring>
      2 #include <cstdio>
      3 
      4 inline void read(int &x)
      5 {
      6     x=0; register char ch=getchar();
      7     for(; ch>'9'||ch<'0'; ) ch=getchar();
      8     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
      9 }
     10 
     11 const int N(3233);
     12 int n,len,num[N],cnt[N];
     13 char s[N];
     14 
     15 inline bool work_1_2()
     16 {
     17     int sum=0,l=1,r=len;
     18     if(len!=n) return 0;
     19     for(int i=len; i; --i)
     20         cnt[i]=cnt[i+1]+num[i],sum+=(num[i])*i;
     21     if(sum%(len+1)==0)
     22     {
     23         for(int i=1; i<=len; ++i)
     24             printf("%d",num[i]);
     25         puts(""); return 1;
     26     }
     27     for(int l=1; l<=n; ++l)
     28     {
     29         if(num[l])
     30         {
     31             if((sum-l)%(n+1)==0)
     32             {
     33                 num[l]=0;
     34                 for(int i=1; i<=n; ++i) printf("%d",num[i]);
     35                 puts(""); return 1;
     36             }
     37         }
     38     }
     39     if(num[n+1>>1]&&(sum-(n+1>>1))%(len+1)==0)
     40     {
     41         num[n+1>>1]=0;
     42         for(int i=1; i<=len; ++i)
     43             printf("%d",num[i]);
     44         puts(""); return 1;
     45     }
     46     return 0;
     47 }
     48 inline bool work_3()
     49 {
     50     int sum=0;
     51     if(len>=n) return 0;
     52     for(int i=len; i; --i)
     53         cnt[i]=cnt[i+1]+num[i],sum+=num[i]*i;
     54     for(int i=1; i<=len; ++i)
     55     {
     56         if((sum+cnt[i])%(n+1)==0)
     57         {
     58             for(int j=1; j<i; ++j) printf("%d",num[j]);
     59             printf("0");
     60             for(int j=i; j<=len; ++j) printf("%d",num[j]);
     61             puts(""); return 1;
     62         }
     63         if((sum+cnt[i]+i)%(n+1)==0)
     64         {
     65             for(int j=1; j<i; ++j) printf("%d",num[j]);
     66             printf("1");
     67             for(int j=i; j<=len; ++j) printf("%d",num[j]);
     68             puts(""); return 1;
     69         }
     70     }
     71     if(sum%(n+1)==0)
     72     {
     73         for(int i=1; i<=len; ++i) printf("%d",num[i]);
     74         printf("0
    "); return 1;
     75     }
     76     if((sum+n)%(n+1)==0)
     77     {
     78         for(int i=1; i<=len; ++i) printf("%d",num[i]);
     79         printf("1
    "); return 1;
     80     }
     81     return 0;
     82 }
     83 inline bool work_4()
     84 {
     85     int sum=0;
     86     if(len<=n) return 0;
     87     for(int i=len; i; --i)
     88         cnt[i]=cnt[i+1]+num[i],sum+=num[i]*i;
     89     for(int i=1; i<=len; ++i)
     90     {
     91         if(!num[i]&&(sum-cnt[i])%(n+1)==0)
     92         {
     93             for(int j=1; j<i; ++j) printf("%d",num[j]);
     94             for(int j=i+1; j<=len; ++j) printf("%d",num[j]);
     95             puts(""); return 1;
     96         }
     97         if(num[i]&&(sum-cnt[i]-i+1)%(n+1)==0)
     98         {
     99             for(int j=1; j<i; ++j) printf("%d",num[j]);
    100             for(int j=i+1; j<=len; ++j) printf("%d",num[j]);
    101             puts(""); return 1;
    102         }
    103     }
    104     if((num[len]&&((sum-len)%(n+1)==0))||(!num[len]&&sum%(n+1)==0))
    105     {
    106         for(int i=1; i<len; ++i)
    107             printf("%d",num[i]);
    108         puts(""); return 1;
    109     }
    110     return 0;
    111 }
    112 
    113 int Presist()
    114 {
    115     freopen("a.in","r",stdin);
    116     freopen("a.out","w",stdout);
    117     read(n);
    118     for(;scanf("%s",s+1)!=EOF;)
    119     {
    120         len=strlen(s+1);
    121         for(int i=1; i<=len; ++i)
    122             num[i]=s[i]-'0';
    123         memset(cnt,0,sizeof(cnt));
    124         if(work_1_2()) continue;
    125         memset(cnt,0,sizeof(cnt));
    126         if(work_3()) continue;
    127         memset(cnt,0,sizeof(cnt));
    128         if(work_4()) continue;
    129         puts("-1");
    130     }
    131     return 0;
    132 }
    133 
    134 int Aptal=Presist();
    135 int main(int argc,char**argv){;}
    AC

    1 /*
    2 呃呃呃
    3 */
    未完成

                       C

    c

    1 /*
    2 呃呃呃
    3 */
    未完成
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7663482.html
Copyright © 2011-2022 走看看