标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 8552 | Accepted: 2704 |
2 3 1 2 3 8 1 5 6 7 9 12 14 17
Bob will win Georgia will win
可以转变成一个Nim问题。把棋子两两成对进行考虑,分成两组,每组的Nim值即为棋子之间的间隔数。
右移视为减小Nim值,左边棋子左移视为增加Nim值,然而不管怎么增加,对手总有办法将其恢复,所以必胜态和必败态和Nim游戏相同。
当棋子个数为奇数时,需要把第一个棋子和他前面的空格分为一组,剩下的分为一组即可。
var a:array[0..10000] of longint; n,i,t:longint; procedure sort(l,r: longint); var i,j,x,y: longint; begin i:=l; j:=r; x:=a[(l+r) div 2]; repeat while a[i]<x do inc(i); while x<a[j] do dec(j); if not(i>j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); j:=j-1; end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; procedure main(); var x,i,j:longint; begin fillchar(a,sizeof(a),0); readln(n); for i:=1 to n do read(a[i]); sort(1,n); x:=0; j:=1; if (n mod 2=1) then begin x:=a[1]-1; inc(j); end; while j<=n do begin x:=x xor(a[j+1]-a[j]-1); inc(j,2); end; if x=0 then writeln(‘Bob will win‘) else writeln(‘Georgia will win‘); end; begin readln(t); for i:=1 to t do main(); end.
标签:
原文地址:http://www.cnblogs.com/yangqingli/p/4898938.html