Editorial for Trò chơi đen trắng
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này
Code mẫu của RR
{$R+,Q+} uses math; const FINP=''; FOUT=''; MAXN=100001; var f1,f2:text; g,n,test:longint; a:array[1..MAXN] of char; procedure openF; begin assign(f1,FINP); reset(f1); assign(f2,FOUT); rewrite(f2); end; procedure closeF; begin close(f1); close(f2); end; procedure inp; begin readln(f1,n); fillchar(a,sizeof(a),'0'); for n:=1 to n do read(f1,a[n]); readln(f1); end; procedure solve; var l,i,u:longint; last:char; begin l:=0; for i:=1 to n do begin if a[i]<>'0' then begin last:=a[i]; break; end; inc(l); end; if l=n then begin g:=2-n mod 2; exit; end; g:=l; l:=0; for u:=i+1 to n do begin if a[u]<>'0' then begin if (last=a[u]) and (l>0) then g:=g xor 1; if (last<>a[u]) and (l>0) then g:=g xor 0; last:=a[u]; l:=0; end else inc(l); end; g:=g xor l; end; procedure ans; begin if g=0 then writeln(f2,2) else writeln(f2,1); end; begin openF; readln(f1,test); for test:=1 to test do begin inp; if n=0 then begin writeln(f2,2); continue; end; solve; ans; end; closeF; end.
Code mẫu của hieult
#include <stdio.h> //#include <conio.h> int TTD(int a) { if(a<0) return -a; else return a; } int main() { int test,n; char s[100001]; scanf("%d",&test); for(int ii = 1;ii<=test;ii++) { scanf("%d",&n); scanf("%s",s); int trai = 0,phai = 0,tong = 0,thutu=0,flag = 0; for(int i = 0;i<n;i++) { if(flag == 0) { if(s[i]=='0') trai++; else { flag = 1; thutu = i; } } else if(s[i]!='0') { if(i-thutu>1 && s[i]==s[thutu]) tong++; thutu=i; } else if(i==n-1) phai = n-1-thutu; } if(trai==phai) { if(tong%2==0) printf("2\n"); else printf("1\n"); } else if(TTD(trai-phai)==1) { if(trai%2==0) { if(trai<phai) { if(tong%2==0) printf("1\n"); else printf("2\n"); } else printf("1\n"); } else { if(trai>phai) { if(tong%2==0) printf("1\n"); else printf("2\n"); } else printf("1\n"); } } else printf("1\n"); } //getch(); }
Code mẫu của ll931110
program BWGAME; const input = ''; output = ''; maxn = 100000; var fi,fo: text; i,nTest: longint; a: array[1..maxn] of longint; gr: array[0..maxn,0..2,0..2] of longint; procedure openfile; begin assign(fi, input); reset(fi); assign(fo, output); rewrite(fo); end; procedure closefile; begin close(fo); close(fi); end; procedure gens; var i: longint; begin fillchar(gr, sizeof(gr), 0); for i := 1 to maxn do begin gr[i,0,1] := i; gr[i,0,2] := i; gr[i,1,0] := i; gr[i,2,0] := i; gr[i,1,1] := 1; gr[i,2,2] := 1; if odd(i) then gr[i,0,0] := 1; end; end; procedure solve; var n,i: longint; cc,xa,xb,res: longint; ch: char; begin readln(fi, n); for i := 1 to n do begin read(fi, ch); a[i] := ord(ch) - ord('0'); end; readln(fi); res := 0; xa := 0; xb := 0; i := 1; while i <= n do begin cc := 0; while (i <= n) and (a[i] = 0) do begin inc(i); inc(cc); end; if i <= n then xb := a[i]; res := res xor gr[cc,xa,xb]; xa := xb; xb := 0; cc := 0; inc(i); end; if res = 0 then writeln(fo, 2) else writeln(fo, 1); end; begin openfile; gens; readln(fi, nTest); for i := 1 to nTest do solve; closefile; end.
Code mẫu của khuc_tuan
#include "stdio.h" #include "string.h" #include "queue" using namespace std; char s[100010]; int n; int main() { int stest; scanf("%d",&stest); while(stest--) { scanf("%d",&n); gets(s); gets(s); int res = 0 ; for(int i=0;i<n;++i) if(s[i]=='0'){ int j = i; while(j+1<n && s[j+1]=='0') ++j; int len = j-i+1; int a,b; if(i==0) a=0; else a='3'-s[i-1]; if(j==n-1) b=0; else b='3'-s[j+1]; if(a==b) { if(b!=0 || len%2==1) res ^= 1; } else if(a==0 || b==0) res ^= len; i = j; } if(res==0) printf("2\n"); else printf("1\n"); } return 0; }
Comments