[HDU1848]Fibonacci again and again
2017-08-14 09:42
316 查看
来源:
ACM Short Term Exam_2007/12/13
题目大意:
Nim游戏的一个变形,给定三堆棋子,每次只能从其中一堆取,取的个数为Fibonacci数列中的任意一项。
思路:
首先递推求出Fibonacci数列的前1000项,然后构造SG函数$sg[i]=mex\{sg[j]|j为i的后继状态\}$。
答案即为三者SG函数的异或。
#include<cstdio> #include<cctype> #include<cstring> inline int getint() { char ch; while(!isdigit(ch=getchar())); int x=ch^'0'; while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); return x; } const int N=1001; int f ={1,1},sg ; bool hash ; int main() { for(int i=2;i<N;i++) f[i]=f[i-2]+f[i-1]; for(int i=1;i<N;i++) { memset(hash,0,sizeof hash); for(int j=1;f[j]<=i;j++) hash[sg[i-f[j]]]=true; for(int j=0;j<N;j++) { if(!hash[j]) { sg[i]=j; break; } } } for(int m=getint(),n=getint(),p=getint();m||n||p;m=getint(),n=getint(),p=getint()) { puts(sg[m]^sg ^sg[p]?"Fibo":"Nacci"); } return 0; }
相关文章推荐
- [SG函数] HDU1848: Fibonacci again and again
- HDU1848 Fibonacci again and again
- ACM-SG函数之Fibonacci again and again——hdu1848
- 新年第一发--HDU1848--Fibonacci again and again(SG函数)
- hdu1848 Fibonacci again and again(SG函数博弈)
- ACM-SG函数之Fibonacci again and again——hdu1848
- [HDU1848]Fibonacci again and again(SG函数)
- ACM-SG函数之Fibonacci again and again——hdu1848
- hdu1848 Fibonacci again and again,SG函数
- 【HDU1848】Fibonacci again and again (博弈论)
- hdu1848 Fibonacci again and again
- HDU 1848 Fibonacci again and again
- (step8.2.6)hdu 1848(Fibonacci again and again——组合博弈)
- HDU 1848 Fibonacci again and again【博弈:SG函数】
- hdu 1848 Fibonacci again and again
- HDU 1848 Fibonacci again and again(博弈sg函数)
- Fibonacci again and again +博弈
- hdu 1848 Fibonacci again and again(组合博弈)
- HDU 1848 Fibonacci again and again
- HDU 1848 Fibonacci again and again(SG函数的应用)