期望得分:0+40+30=70
实际得分:0+10+10=20
题目修改:只能由0变1,只能用一次操作
大模拟
#include<cstdio> #include<cstring> using namespace std; char s[2001]; int len,n; int cnt[2001]; bool solve1() { if(len!=n) return false; int num=0; for(int i=0;i<len;i++) if(s[i]=='1') num+=i+1; if(num%(n+1)==0) { puts(s); return true; } return false; } bool solve2() { if(len!=n) return false; int num=0; for(int i=0;i<len;i++) if(s[i]=='1') num+=i+1; for(int i=0;i<len;i++) if(s[i]=='1') { num-=(i+1); if(num%(n+1)==0) { for(int j=0;j<i;j++) putchar(s[j]); putchar('0'); for(int j=i+1;j<len;j++) putchar(s[j]); printf("\n"); return true; } num+=(i+1); } return false; } bool solve3() { if(len<=n) return false; int num=0; for(int i=0;i<len;i++) if(s[i]=='1') num+=i+1,cnt[i+1]=cnt[i]+1; else cnt[i+1]=cnt[i]; for(int i=0;i<len;i++) if(s[i]=='0') { num-=(cnt[len]-cnt[i]); if(num%(n+1)==0) { for(int j=0;j<i;j++) putchar(s[j]); for(int j=i+1;j<len;j++) putchar(s[j]); printf("\n"); return true; } num+=(cnt[len]-cnt[i]); } else { num-=(cnt[len]-cnt[i+1]); num-=(i+1); if(num%(n+1)==0) { for(int j=0;j<i;j++) putchar(s[j]); for(int j=i+1;j<len;j++) putchar(s[j]); printf("\n"); return true; } num+=(cnt[len]-cnt[i+1]); num+=(i+1); } return false; } bool solve4() { if(len>=n) return false; int num=0; for(int i=0;i<len;i++) if(s[i]=='1') num+=(i+1),cnt[i+1]=cnt[i]+1; else cnt[i+1]=cnt[i]; for(int i=0;i<len;i++) { num+=cnt[len]-cnt[i]; if(num%(n+1)==0) { for(int j=0;j<i;j++) putchar(s[j]); putchar('0'); for(int j=i;j<len;j++) putchar (s[j]); printf("\n"); return true; } num+=i+1; if(num%(n+1)==0) { for(int j=0;j<i;j++) putchar(s[j]); putchar('1'); for(int j=i;j<len;j++) putchar(s[j]); printf("\n"); return true; } num-=(i+1); num-=(cnt[len]-cnt[i]); } if(num%(n+1)==0) { printf("%s",s); printf("0\n");return true; } if((num+len+1)%(n+1)==0) { printf("%s",s); printf("1\n"); return true; } return false; } int main() { freopen("a.in","r",stdin); freopen("a.out","w",stdout); scanf("%d",&n); while(scanf("%s",s)!=EOF) { len=strlen(s); if(solve1()) continue; if(solve2()) continue; if(solve3()) continue; if(solve4()) continue; printf("-1\n"); } }