可以看出,当x%8==0,是sg(x)=x-1 ,x%8==7 时,sg(x)=x+1
sg打表程序
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int i, j, k;
int sg[1010], mex[1010];
sg[0] = 0, sg[1] = 1;
for(i = 2; i <= 1000; i++) {
memset(mex, 0, sizeof mex);
for(j = 1; j <= i; j++) {
for(k = 1; k <= i; k++) {
if(j + k < i) {
mex[sg[j]^sg[k]^sg[i - j - k]] = 1;
}
}
}
for(j = 1; j <= i; j++) {
mex[sg[i - j]] = 1;
}
for(j = 0; ; j++) {
if(mex[j] == 0) {
sg[i] = j;
break;
}
}
}
for(i = 0; i <= 100; i++) {
printf("sg[%d] : %d\n", i, sg[i]);
}
return 0;
}
#include<stdio.h>
using namespace std;
int sg(int x){
if(x%8==0)
return x-1;
if(x%8==7)
return x+1;
return x;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
int tem=0;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
tem^=sg(x);
}
if(tem)
puts("First player wins.");
else puts("Second player wins.") ;
}
return 0;
}