hdu 1848 sg博弈模版题
来源:互联网 发布:程序员培训夜校 编辑:程序博客网 时间:2024/06/03 02:24
/*
计算从1-n范围内的SG值。
Array(存储可以走的步数,Array[0]表示可以有多少种走法)
Array[]需要从小到大排序
1.可选步数为1-m的连续整数,直接取模即可,SG(x) = x % (m+1);
2.可选步数为任意步,SG(x) = x;
3.可选步数为一系列不连续的数,用GetSG(计算)
*/
int SG[MAX], hash[MAX];
void GetSG(int Array[], int n = MAX-1)
{
int i, j;
memset(SG, 0, sizeof(SG));
for(i = 0; i <= n; i++)
{
memset(hash, 0, sizeof(hash));
for(j = 1; Array[j]<=i; j++)
hash[SG[i - Array[j]]] = 1;
for(j = 0; j <= n; j++)
{
if(hash[j] == 0)
{
SG[i] = j;
break;
}
}
}
}
View Code
// I'm lanjiangzhou//C#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>#include <time.h>//C++#include <iostream>#include <algorithm>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <cctype>#include <stack>#include <string>#include <list>#include <queue>#include <map>#include <vector>#include <deque>#include <set>using namespace std;//*************************OUTPUT*************************#ifdef WIN32#define INT64 "%I64d"#define UINT64 "%I64u"#else#define INT64 "%lld"#define UINT64 "%llu"#endif//**************************CONSTANT***********************#define INF 0x3f3f3f3f// aply for the memory of the stack//#pragma comment (linker, "/STACK:1024000000,1024000000")//end/*const int maxn =1010;int k;int fibo[maxn],f[maxn];int mex(int p){ int t; bool g[110]={0}; for(int i=0;i<k;i++){ t=p-fibo[i]; if(t<0) break; if(f[t]==-1) f[t]=mex(t); g[f[t]]=1; } for(int i=0;;i++){ if(!g[i]) return i; }}int main(){ int n,m,p,s; fibo[0]=1; fibo[1]=2; for(int i=2;i<=18;i++){ fibo[i]=fibo[i-1]+fibo[i-2]; } k=19; sort(fibo,fibo+k); memset(f,0,sizeof(f)); f[0]=0; for(int i=1;i<=1000;i++){ f[i]=mex(i); } while(scanf("%d%d%d",&m,&n,&p)!=EOF){ if(m==0&&n==0&&p==0) break; s=0; s=s^f[m]^f[n]^f[p]; if(s==0) { printf("Nacci\n"); } else { printf("Fibo\n"); } } return 0;}*/const int maxn =1010;int SG[maxn],hash[maxn];int fibs[maxn];void Fib(){ fibs[1]=1; fibs[2]=2; for(int i=3;i<=18;i++){ fibs[i]=fibs[i-1]+fibs[i-2]; } return;}void GetSG(){ memset(SG,0,sizeof(SG)); for(int i=0;i<=maxn;i++){ memset(hash,0,sizeof(hash)); for(int j=1;fibs[j]<=i;j++){ hash[SG[i-fibs[j]]]=1; } for(int j=0;j<=maxn;j++){ if(hash[j]==0){ SG[i]=j; break; } } } return;}int main(){ Fib(); GetSG(); int n,m,p; while(scanf("%d%d%d",&n,&m,&p)!=EOF){ if(n==0&&m==0&&p==0) break; if(SG[m]^SG[n]^SG[p]){ printf("Fibo\n"); } else { printf("Nacci\n"); } }}
- hdu 1848 sg博弈模版题
- HDU-1848--博弈SG函数模板题
- HDU 1848 博弈 SG值
- (组合博弈)(sg函数模版)HDU 5724 Chess
- hdu 1848【博弈】sg函数应用
- hdu 1536 SG函数模版题
- HDU 1536 (博弈SG)
- hdu 2509 sg博弈
- hdu 1729 sg博弈
- hdu 1868 博弈 SG函数
- hdu - 4664 - Triangulation(博弈SG)
- hdu 1079 (SG博弈)
- HDU 5724 博弈,SG函数
- hdu 1730 sg博弈||nim博弈
- SG博弈简单题
- HDU 1848 Fibonacci again and again【博弈:SG函数】
- HDU 1848 Fibonacci again and again(博弈 SG运用)
- HDU 1848(sg博弈) Fibonacci again and again
- 心杂
- hdu 2177 威佐夫博弈+输出使你胜的你第1次取石子后剩下的两堆石子的数量
- hdu 1517 K(2~9)倍博弈
- hdu 2897巴什博弈变形
- (转载)SG函数模板
- hdu 1848 sg博弈模版题
- 坚持住
- fight1
- 莫走回头路
- 真正体会到一个ac的快感
- poj 1804求逆序数
- poj 3469 网络流最小割
- poj 1389 线段树面积覆盖
- vs2010配备boost编程环境