标签:fibonacci again and hdu1848 sg 博弈 数论
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6170 Accepted Submission(s): 2574
1 1 1 1 4 1 0 0 0
Fibo Nacci
题意:取石子问题,一共有3堆石子,每次只能取斐波那契数个石子,先取完石子者胜利,问先手胜还是后手胜
可选步数为一系列不连续的数,用GetSG(计算) 最终结果是所有SG值异或的结果
转载请注明出处:寻找&星空の孩子
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848
#include<stdio.h>
#include<string.h>
#define N 1001
//f[]:可以取走的石子个数
//sg[]:0~n的SG函数值
//hash[]:mex{}
int f[N],sg[N],hash[N];
void getSG(int n)
{
int i,j;
memset(sg,0,sizeof(sg));
for(i=1;i<=n;i++)
{
memset(hash,0,sizeof(hash));
for(j=1;f[j]<=i;j++)
hash[sg[i-f[j]]]=1;
for(j=0;j<=n;j++) //求mes{}中未出现的最小的非负整数
{
if(hash[j]==0)
{
sg[i]=j;
break;
}
}
}
}
int main()
{
int i,m,n,p;
f[0]=f[1]=1;
for(i=2;i<=16;i++)
f[i]=f[i-1]+f[i-2];
getSG(1000);
while(scanf("%d%d%d",&m,&n,&p)!=EOF)
{
if(m==0&&n==0&&p==0)
break;
if((sg[m]^sg[n]^sg[p])==0)
printf("Nacci\n");
else
printf("Fibo\n");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
Fibonacci again and again(hdu1848+SG打表)
标签:fibonacci again and hdu1848 sg 博弈 数论
原文地址:http://blog.csdn.net/u010579068/article/details/47283035