博弈论 SG函数Fibonacci again and again
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博弈论 SG函数Fibonacci again and again相关的知识,希望对你有一定的参考价值。
【博弈论 SG函数】Fibonacci again and again
题目
思路
裸的SG函数板子题,只会写板子题的懒狗是我了。
然后试着SG函数打表找一下规律,然后发现完全找不出来啊啊啊淦。三个参数三维度打表直接暴毙.jpg。(大雾)
看来打表的话1维和2维的比较合适
AC代码
SG函数直接做
// Problem: Fibonacci again and again
// Contest: HDOJ
// URL: http://acm.hdu.edu.cn/showproblem.php?pid=1848
// Memory Limit: 32 MB
// Time Limit: 1000 ms
// FishingRod
#include<bits/stdc++.h>
using namespace std;
#define endl "\\n"
typedef long long LL;
typedef pair<int,int> PII;
//#define MULINPUT
/*DATA & KEY
*/
int T;
const int N=1e4+10;
LL fib[25]={0,1};
LL f[N];
LL sg(LL x)
{
if(x==0)return 0;
if(f[x]!=-1)return f[x];
unordered_set<int>S;
for(int i=1;i<=18;i++)
{
LL sum=fib[i];
if(x>=sum)S.insert(sg(x-sum));
}
for(int i=0;;++i)
if(!S.count(i))
return f[x]=i;
}
void solve(int C)
{
//NEW DATA CLEAN
//NOTE!!!
for(int i=2;i<=18;i++)fib[i]=fib[i-1]+fib[i-2];
LL res=0;
LL a,b,c;
memset(f,-1,sizeof f);
while(cin>>a>>b>>c)
{
if(a==0&&b==0&&c==0)break;
res=sg(a)^sg(b)^sg(c);
if(res)puts("Fibo");
else puts("Nacci");
}
}
int main()
{
#ifdef MULINPUT
scanf("%d",&T);
for(int i=1;i<=T;i++)solve(i);
#else
solve(1);
#endif
return 0;
}
以上是关于博弈论 SG函数Fibonacci again and again的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1848 Fibonacci again and again (sg函数,博弈论)
HDU1848Fibonacci again and again(博弈论)
HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
HDU 1848 Fibonacci again and again(简单博弈SG函数)