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\n"); 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\n"); 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 */
未完成

 

posted @ 2017-10-15 20:10  Aptal丶  阅读(132)  评论(0编辑  收藏  举报