不会啊。。。
思路大概就是有向图游戏的和吧。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
using namespace std;
const int N=1e3+5;
void div(int *y,int n)
{
for(int i=1;i<n;i++)
if(n%i==0)y[++y[0]]=i;
}
int f[N];
int mex(int x)
{
if(f[x]!=-1)return f[x];
int y[501],k=0;y[0]=0;bool hash[N<<2];
div(y,x);memset(hash,0,sizeof(hash));
for(int i=1;i<=y[0];i++)k^=mex(y[i]);
for(int i=1;i<=y[0];i++)hash[k^f[y[i]]]=1;
for(int i=0;;i++)if(!hash[i]){f[x]=i;break;}
return f[x];
}
int main()
{
int n;memset(f,-1,sizeof(f));f[1]=0;
while(scanf("%d",&n)!=EOF)
{
int k=0;
for(int i=1,x;i<=n;i++)
{
scanf("%d",&x);
k^=mex(x);
}
if(k)puts("freda");
else puts("rainbow");
}
return 0;
}
最后一次更新于2019-09-29
0 条评论