POJ.1704.Georgia and Bob(博弈論 Nim)
阿新 • • 發佈:2018-02-25
std urn script desc sdi log define gis include
題目鏈接
\(Description\)
一個1~INF的坐標軸上有n個棋子,給定坐標Pi。棋子只能向左走,不能跨越棋子,且不能越界(<1)。兩人每次可以將任意一個可移動的棋子向左移動一個單位。問先/後手會贏或是否無解。
\(Solution\)
首先考慮相鄰兩個棋子
無論一個人怎麽移動前邊的棋子,後手都能移動後面棋子同樣的距離使得這兩個棋子間間隔不變
同時兩個棋子局面的終止是兩個棋子相鄰
不難想到以這兩個棋子間距離為石子數做一個Nim遊戲
那擴展到n個棋子?
兩兩配對,對於每一對看做一個Nim遊戲
當棋子數為奇數時需要將第一個棋子和點1看做一對
狀態是有限的 不會無解
//332K 0ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
int A[1005];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
int t=read(),n,res,i;
while(t--)
{
n=read();
for (i=1; i<=n; ++i) A[i]=read();
std::sort(A+1,A+1+n);
if(n&1)
for(res=A[1]-1,i=2; i<=n; i+=2)
res^=(A[i+1]-A[i]-1);
else
for(res=0,i=1; i<=n; i+=2)
res^=(A[i+1]-A[i]-1);
puts(res?"Georgia will win" :"Bob will win");
}
return 0;
}
POJ.1704.Georgia and Bob(博弈論 Nim)