sg博弈题,这个题想到sg了,可是memchr这个函数,我没想到,这个函数已经坑了我好多次了,每次打memset就会跳出它来,并且它还不报错!莫名wa挺了。
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<stdbool.h>
using namespace std;
const int maxn = 2010;
bool vis[maxn];
int sg[maxn];
void getsg()
{
sg[0] = sg[1] = 0;
for(int i = 2; i < maxn; i++)
{
memset(vis, false, sizeof(vis));
int tmp = 0;
for(int j = 1; j < i; j++)
{
int x = i / j;
int rem = i % j;
if(x % 2)
{
vis[sg[rem] ^ sg[j]] = true;
}
else
vis[sg[rem]] = true;
}
for(int j = 0; ; j++)
{
if(!vis[j])
{
sg[i] = j;
break;
}
}
}
}
int main()
{
getsg();
int n;
scanf("%d", &n);
int ans = 0;
for(int i = 0; i < n; i++)
{
int x;
scanf("%d", &x);
ans ^= sg[x];
}
if(ans)
printf("First\n");
else
printf("Second\n");
return 0;
}