HDU1848_Fibonacci again and again_经典的求sg
2012-07-26 16:30
423 查看
/* *State: 1848 0MS 320K 994 B C++ *题目大意: * 给定3堆棋子,每次可以从每一堆中拿斐波那契个棋子,最后 * 先取完者胜,判断该局是否为奇异局势(P或N点); *解题思路: * 典型的求sg函数即可求解。 */ #include <iostream> #include <stdio.h> using namespace std; const int MAX = 1024; int sg[MAX]; void pre_init() { int fib[1024]; fib[0] = fib[1] = 1; for(int i = 2; i < 1024; i++) { fib[i] = fib[i - 1] + fib[i - 2]; } bool vis[MAX] = {false}; for(int i = 0; i < MAX; i++) { int h = 1; memset(vis, false, sizeof(vis)); while(i >= fib[h]) { int tmp = i - fib[h++]; vis[sg[tmp]] = true; } int j; for(j = 0; j <= i; j++) { if(vis[j] == false) break; } sg[i] = j; } return ; } void view_arr(int arr[], int n) { for(int i = 0; i < n; i++) cout << arr[i] << endl; return ; } int main(void) { pre_init(); //view_arr(sg, 20); int a[3]; while(scanf("%d %d %d", &a[0], &a[1], &a[2]) == 3) { if(!(a[0] || a[1] || a[2])) break; int yihuo = 0; for(int i = 0; i < 3; i++) { yihuo ^= sg[a[i]]; } if(!yihuo) printf("Nacci\n"); else printf("Fibo\n"); } return 0; }
相关文章推荐
- HDU 1848 - Fibonacci again and again(SG)
- hdu 1848 Fibonacci again and again sg定理
- HDU 1848 Fibonacci again and again SG打表
- HDU_1848 Fibonacci again and again(SG)
- HDU-1848-Fibonacci again and again【sg定理】【博弈】
- HDU 1848 Fibonacci again and again(博弈 SG运用)
- HDU - 1848 Fibonacci again and again SG函数应用
- HDU 1848 Fibonacci again and again(博弈 SG运用)
- hdu 1848 Fibonacci again and again(SG)
- HDU 1848 Fibonacci again and again SG函数详解!
- hdu 1848 Fibonacci again and again(sg)
- HDU 1848 Fibonacci again and again + POJ 2960 S-Nim(SG 函数)
- hdu1848 Fibonacci again and again(SG游戏功能)
- hdu 1848 Fibonacci again and again sg值 博弈论
- hdu 1848 Fibonacci again and again(简单sg)
- hdu 1848 Fibonacci again and again (SG)
- hdu1848 Fibonacci again and again(SG)
- HDU_1848 Fibonacci again and again(SG函数应用)
- HDU 1848 Fibonacci again and again(SG函数)
- HDU1848 Fibonacci again and again SG函数