如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。
URAL/1007
来自"NOCOW"
< URAL
#include <iostream> #include <stdio.h> #include <string> using namespace std; int n, sum[2010]; string S; int main() { scanf("%d", &n); while (cin >> S) { int len = S.size(), tot = 0; memset(sum, 0, sizeof(sum)); for (int i = len - 1; i >= 0; --i) { sum[i] = sum[i + 1] + (S[i] == '1'); if (S[i] == '1') tot += i + 1; } if (len == n) { int pos = tot % (n + 1); if (pos) S[pos - 1] = '0'; goto END; } else if (len < n) for (int i = len; i >= 0; --i) { if ((tot + sum[i]) % (n + 1) == 0) { S.insert(i, "0"); goto END; } if ((tot + (i + 1) + sum[i]) % (n + 1) == 0) { S.insert(i, "1"); goto END; } } else for (int i = len - 1; i >= 0; --i) { if (S[i] == '1' && (tot - (i + 1) - sum[i] + 1) % (n + 1) == 0) { S.erase(i, 1); goto END; } if (S[i] == '0' && (tot - sum[i]) % (n + 1) == 0) { S.erase(i, 1); goto END; } } END : cout << S << endl; } return 0; } //From FingerSed //稍稍把lx和lxx的结合起来写 //sum[i]为子串S[i~len]中1的个数
#include <iostream> #include <cstring> using namespace std; char s[2010]; int n,tot,length,f[2010]; bool flag; void insert_c(char c,int x) { for (int i=n;i>x;--i) s[i]=s[i-1]; s[x]=c,s[n+1]='\0'; } void delete_c(int x) { for (int i=x;i<=n;++i) s[i]=s[i+1]; s[n+1]='\0'; } void Delete() { for (int i=n;i;--i) { if (flag) break; if ((tot+i+f[i])%(n+1) == 0) { insert_c('1',i); flag=true; } else if ((tot+f[i])%(n+1) == 0) { insert_c('0',i); flag=true; } } } void Instead() { for (int i=n;i;--i) { if (flag) break; if (s[i] == '1') if ((tot-i)%(n+1) == 0) { s[i]='0'; flag=true; } } } void Insert() { for (int i=length;i;--i) { if (flag) break; if (s[i] == '1') { if ((tot-i-f[i]+1)%(n+1) == 0) { delete_c(i); flag=true; } } else { if ((tot-f[i])%(n+1) == 0) { delete_c(i); flag=true; } } } } int main() { scanf("%d",&n); while (scanf("%s",&s[1]) != EOF) { tot=0,flag=false; memset(f,0,sizeof(f)); length=strlen(&s[1]); for (int i=length;i;--i) { f[i]=f[i+1]; if (s[i] == '1') ++f[i]; } for (int i=1;i<=length;++i) if (s[i] == '1') tot+=i; if (length < n) Delete(); else if (length == n) Instead(); else Insert(); printf("%s\n",&s[1]); } return 0; } //by zzy
//c++ string暴力by zhujf553 #include <iostream> #include <string> using namespace std; int n; bool count(string &s) { int k = 0; for(int i = 1 ; i <= n ; i++) if(s[i - 1] == '1') k += i; return k % (n + 1) == 0; } void work() { string s; cin >> n; while(cin >> s) { if(s.length() == n && count(s)) goto end; if(s.length() == n) for(int i = 1 ; i <= n ; i++) if(s[i - 1] == '1') { s[i - 1] = '0'; if(count(s)) goto end; s[i - 1] = '1'; } if(s.length() < n) for(int i = 1 ; i <= n ; i++) { s.insert(i - 1, "1"); if(count(s)) goto end; s.erase(i - 1, 1); s.insert(i - 1, "0"); if(count(s)) goto end; s.erase(i - 1, 1); } if(s.length() > n) for(int i = 1 ; i <= n ; i++) { string tmp = s.substr(i - 1, 1); s.erase(i - 1, 1); if(count(s)) goto end; s.insert(i - 1, tmp); } end: cout << s << endl; } } int main() { work(); return 0; }
var str:ansistring; l,n:longint; function getsum:longint; var k,i:longint; begin k:=0; for i:=1 to length(str) do if str[i]='1' then k:=K+i; getsum:=k; end; function get1:longint; var k,i:longint; begin k:=0; for i:=1 to length(str) do if str[i]='1' then k:=K+1; get1:=k; end; procedure work1; var sum:longint; begin sum:=getsum; sum:=(sum+(n+1)*1000) mod (n+1); if sum=0 then begin writeln(str);exit; end; str[sum]:='0'; writeln(str); end; procedure work2; var sum,i,k1:longint; begin sum:=getsum; k1:=get1; for i:=1 to n+1 do case str[i] of '1': begin dec(k1); if (sum-k1-i) mod (n+1)=0 then begin delete(str,i,1); writeln(str); exit; end; end; '0': begin if (sum-k1) mod (n+1)=0 then begin delete(str,i,1); writeln(str); exit; end; end; end; end; procedure work3; var sum,i,k1:longint; begin sum:=getsum; k1:=get1; if sum mod(n+1)=0 then begin writeln(str+'0');exit;end; if ((sum+length(str)+1) mod (n+1)=0) then begin writeln(str+'1');exit;end; for i:=1 to n-1 do begin if (sum+k1+i) mod(N+1)=0 then begin writeln(copy(str,1,i-1)+'1'+copy(str,i,length(str)-i+1)); exit; end; if (sum+k1) mod(N+1)=0 then begin writeln(copy(str,1,i-1)+'0'+copy(str,i,length(str)-i+1)); exit; end; if str[i]='1' then dec(k1); end; end; begin {$IFNDEF ONLINE_JUDGE} assign(input, 'input.in'); reset(input); assign(output, 'output.out'); rewrite(output); {$ENDIF} readln(n); while not(eof) do begin while str='' do readln(str);//Ural 喜欢搞点空行 l:=length(str); if l=n then work1; if l>n then work2; if l<n then work3; str:=''; end; {$IFNDEF ONLINE_JUDGE} close(input); close(output); {$ENDIF} end. //Yu Zeming
Var n,i:longint; s:ansistring; Procedure Process1(s1:ansistring); Var i,c:longint; begin c:=0; For i:=1 to n do If s1[i]='1' Then c:=c+i; If c mod (n+1)=0 then writeln(s1) else begin For i:=1 to n do If (s1[i]='1')and((c-i) mod (n+1)=0) then write('0') else write(s1[i]); writeln; end; end; Procedure Process2(s1:ansistring); Var A:array [1..1000] of integer; i,c,j,z,js:longint; begin c:=0; For i:=1 to length(s1) do If s1[i]='1' then c:=c+i; Fillchar(a,sizeof(a),0); js:=0; For i:=length(s1) downto 1 do begin If s1[i]='1' then js:=js+1; A[i]:=js; end; For i:=1 to n do If (c+i+A[i]) mod (n+1)=0 then begin For j:=1 to i-1 do write(s1[j]); write('1'); For j:=i to length(s1) do write(s1[j]); writeln; break; end else If (c+A[i]) mod (n+1)=0 then begin For j:=1 to i-1 do write(s1[j]); write('0'); For j:=i to length(s1) do write(s1[j]); writeln; break; end end; Procedure Process3(s1:ansistring); var ss:ansistring; i,j,c:longint; begin For i:=1 to length(s1) do begin ss:=s1; delete(ss,i,1); c:=0; For j:=1 to n do If ss[j]='1' then c:=c+j; If c mod (n+1)=0 then begin writeln(ss); break; end; end; end; begin readln(n); while not(eof) do begin readln(s); If s='' then else begin If length(s)=n then Process1(s); If length(s)<n then Process2(s); If length(s)>n then Process3(s); end; end; end. From Xc_Zzq
var t:ansistring; i,j,k,n,len,s:longint; sum:array[0..1200]of longint; x:boolean; procedure work1; begin if s mod (n+1)=0 then begin writeln(t); exit; end; for i:=1 to len do begin if t[i]='1' then if (s-i) mod (n+1)=0 then begin t[i]:='0'; writeln(t); exit; end; end; end; procedure work2; begin for i:=1 to len+1 do begin j:=sum[len]-sum[i-1]; if (s+j) mod (n+1)=0 then begin insert('0',t,i); writeln(T); exit; end; if (s+j+i) mod (n+1)=0 then begin insert('1',t,i); writeln(T); exit; end; end; end; procedure work3; begin for i:=1 to len do begin j:=sum[len]-sum[i]; if t[i]='0' then begin if (s-j) mod (n+1)=0 then begin delete(t,i,1); writeln(T); exit; end; end else begin if (s-j-i) mod (n+1)=0 then begin delete(t,i,1); writeln(t); exit; end; end; end; end; begin readln(n); while not(eof) do begin readln(t); if t='' then continue; sum[0]:=0; s:=0; len:=length(T); for i:=1 to len do if t[i]='1' then begin sum[i]:=sum[i-1]+1; inc(s,i); end else sum[i]:=sum[i-1]; if length(t)=n-1 then work2 else if length(t)=n then work1 else work3; end; end. from zlq
var bo:boolean; n,sum:longint; f:array[1..2000]of longint; s:ansistring; function judge(s:ansistring):boolean; var i,sum:longint; begin sum:=0; if length(s)<>n then exit(false); for i:=1 to length(s) do if s[i]='1' then inc(sum,i); if sum mod (n+1)=0 then exit(true); if sum=0 then exit(true); exit(false); end; procedure deal(s:ansistring); var i,x:longint; sx:ansistring; begin x:=length(s); if n=x then for i:=1 to n do if ((sum-i) mod (n+1)=0)and(s[i]='1') then begin writeln(copy(s,1,i-1),'0',copy(s,i+1,length(s)-i)); exit; end; if x>n then for i:=1 to x do if (((sum-i-f[i]+1) mod (n+1)=0)and(s[i]='1')) or(((sum-f[i]) mod (n+1)=0)and(s[i]='0')) then begin writeln(copy(s,1,i-1),copy(s,i+1,length(s)-i)); exit; end; if x<n then begin if sum mod (n+1)=0 then begin writeln(s,'0'); exit; end; if (sum+n) mod (n+1)=0 then begin writeln(s,'1'); exit; end; for i:=1 to x do begin if (sum+f[i]) mod (n+1)=0 then begin writeln(copy(s,1,i-1),'0',copy(s,i,length(s)-i+1)); exit; end; if (sum+f[i]+i) mod (n+1)=0 then begin writeln(copy(s,1,i-1),'1',copy(s,i,length(s)-i+1)); exit; end; end; end; end; procedure dealwith(var s:ansistring); var i:longint; begin fillchar(f,sizeof(f),0); sum:=0; i:=0; repeat inc(i); if s[i]=' ' then begin delete(s,i,1); dec(i); end; until i>=length(s); for i:=length(s) downto 1 do if s[i]='1' then begin inc(sum,i); f[i]:=f[i+1]+1; end else f[i]:=f[i+1]; end; begin readln(n); repeat bo:=false; readln(s); if length(s)>0 then dealwith(s); if length(s)>0 then begin if judge(s) then writeln(s) else deal(s); end; until eof; end. from churchill