您的位置:首页 > 大数据 > 人工智能

HDU1848----Fibonacci again and again

2013-08-20 09:24 417 查看
求出三堆石子的SG函数,然后异或之后来判断谁赢。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;

int sg[1005];
int n,m,p,f[1000],i,j;
bool visit[1005];

void find_sg()
{
for(i=2;i<=1000;i++)
{
memset(visit,false,sizeof(visit));
for(j=1;f[j]<=i;j++)
{
int flag=sg[i-f[j]];
visit[flag]=true;
}
for(j=0;j<20;j++)
{
if(!visit[j])
{
sg[i]=j;
break;
}
}
}
}

int main()
{
f[1]=1,f[2]=2,sg[0]=0,sg[1]=1;
for(i=3;i<=20;i++)
f[i]=f[i-1]+f[i-2];
while(scanf("%d%d%d",&n,&m,&p)!=EOF)
{
if((n+m+p)==0)
break;
find_sg();
int sum=sg[m]^sg
^sg[p];
if(sum)
printf("Fibo\n");
else
printf("Nacci\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: