题意:取石子的简单题,增加种操作,将一个堆分成3个部位空的堆。
题解:打表找规律。
#include <iostream>
#include <string.h>
#include <algorithm>
#include<vector>
using namespace std;
#define N 1010
#define MOD 1000000007
/*打表 找规律
int sg[100];
int main() {
for(int i=0;i<=1;i++){
sg[i]=i;
}
for(int i=2;i<50;i++){
vector<int> vi(125000,0);
for(int j=0;j<i;j++){
vi[sg[j]]=1;
}
for(int j=1;j<i;j++){
for(int k=1;k+j<i;k++){
int e = i-j-k;
//int e = i-j-k;
vi[sg[j]^sg[k]^sg[e]]=1;
}
}
for(int j=0;;j++){
if(vi[j]==0){
sg[i]=j;
break;
}
}
}
for(int i=0;i<50;i++){
printf("%d,",sg[i]);
}
return 0;
}
*/
int sg(int x){
if(x%8==7) return x+1;
if(x%8==0&&x!=0) return x-1;
return x;
}
int main(){
int T;
scanf(" %d",&T);
while(T--){
int n;
scanf(" %d",&n);
int ret = 0;
while(n--){
int x;
scanf(" %d",&x);
ret^=sg(x);
}
if(ret){
printf("First player wins.\n");
}else{
printf("Second player wins.\n");
}
}
return 0;
}