官方题解:
sg[0]=0
当x=8k+7时sg[x]=8k+8,
当x=8k+8时sg[x]=8k+7,
其余时候sg[x]=x;(k>=0)
打表找规律可得,数学归纳法可证。
把每堆石子看成一种局面,sg[i]的i表示石子的个数
当前局面就是n个局面的异或和
根据题意推sg[i]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
const int N=5000+10;
void work()
{
int n;
scanf("%d",&n);
int Ans=0;
for (int i=0;i<n;i++){
int x;scanf("%d",&x);
if (x%8==0)x--;else if ((x+1)%8==0)x++;
Ans^=x;
}
if (Ans)puts("First player wins.");
else puts("Second player wins.");
}
int main()
{
int Case;scanf("%d",&Case);
while (Case--)work();
return 0;
}