标签: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