博弈论 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函数)

HDU.1848.Fibonacci again and again(博弈论 Nim)

HDU 1848(sg博弈) Fibonacci again and again