链接:https://codeforces.com/gym/102059/problem/I
题意:给定N个点,围成一个圈,每次玩家选择两个点连线,不得与之前连的线相交。 如果玩家连线形成了一个多边形或者没有选的点,输。
题解:连一条边会划分成两个圈(子问题),跑sg函数

#include <bits/stdc++.h>
using namespace std;
const int maxn=5005;
int sg[maxn], vis[maxn];
void calsg()
{
sg[0]=0; sg[1]=0; sg[2]=1;
for(int i=3; i<maxn; i++)
{
memset(vis, 0, sizeof(vis));
for(int j=0; j<=i-2; j++)
vis[sg[j]^sg[i-j-2]]=1;
for(int j=0; ; j++)
if(!vis[j]){
sg[i]=j; break;
}
}
}
int main()
{
calsg();
int T;
for(cin>>T; T--; )
{
int n; cin>>n;
printf(sg[n]?"First\n":"Second\n");
}
return 0;
}
