n堆硬币,每堆各有xi枚硬币。给定k个数字 a1,a2,a3,...,ak。两人轮流选出一堆硬币,从中取出一些硬币。每次所取硬币枚数一定要在a1,a2,a3,...,ak中。
int N,K,X[MAX_N],A[MAX_K];
int grundy[MAX_X+1];
void solve()
{
grundy[0]=0;
int max_x=*max_element(X,X+N);
for(int j=1;j<=max_x;j++)
{
set<int> s;
for(int i=0;i<k;i++)
{
if(A[i]<=j) s.insert(grundy[j-A[i]]);
}
int g=0;
while(s.count(g)!=0) g++;
grundy[j]=g;
}
int x=0;
for(int i=0;i<N;i++) x^=grundy[X[i]];
if(x!=0) puts("win");
else puts("fail");
}