改题面只有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){;}
1 /* 2 呃呃呃 3 */
C
c
1 /* 2 呃呃呃 3 */