<span>SG函数博弈模板</span>

#include <stdio.h>
#include <cstring>
#define lose {printf("NO\n");return;}
#define win {printf("YES\n");return;}
#define all(A) (A).begin(),(A).end()
#define FOR(I, A, B) for (int I = (A); I <= (B); ++I)
#define PER(I, A, B) for (int I = (A); I >= (B); --I)
#define DB(A) cout<<(A)<<endl 
#define lson k*2
#define rson k*2+1
#define fi first
#define se second
#define PB push_back
#define Pair pair<int,int>
#define MP make_pair
#define LL long long
#define ull unsigned long long
//#define int LL
using namespace std;
//var
const int maxn=2e5+10;
const int MAX=1000;
const int inf=0x3f3f3f3f;   
const int mod=1e9+7;
//head
int n,m;
int a[maxn]; 
int b[maxn];

int f[maxn];


int SG[maxn];
int S[maxn];
void getSG(int n)
{
    int i,j;
    memset(SG,0,sizeof(SG));
    SG[0]=0;
    for(i = 1; i <= n; i++)
	{
        memset(S,0,sizeof(S));
        for(j = 0; f[j] <= i && j <= 16; j++)
            S[SG[i-f[j]]] = 1;
        for(j = 0;;j++) if(!S[j])
		{
            SG[i] = j;
            break;
        }
    }
}


void solve()
{	
	int n,m,k;
    f[0] = f[1] = 1;
    for(int i = 2; i <= 16; i++)
        f[i] = f[i-1] + f[i-2];
    getSG(1000);
    while(scanf("%d%d%d",&m,&n,&k),m||n||k)
	{
        if(SG[n]^SG[m]^SG[k]) printf("Fibo\n");//three pack of stones 's SG xor
		else printf("Nacci\n");
    }
} 
signed main()
{
    // freopen("read.txt", "r", stdin);
    // freopen("ans.txt", "w", stdout);
    int TestCase = 1;
    //cin>>TestCase;
    while (TestCase--)
    {
        solve();
    }
    char EndFile = getchar();
    EndFile = getchar();
    return 0;
}
全部评论

相关推荐

董春花_:真诚无罪,别听评论区那个清华的。按他的逻辑,你有分寸人觉得你是不想来,你积极热情人觉得你太想来,你好骗人就可你养鱼,你不好骗人觉得你服从性不高,合着**做啥都白扯。保持谦逊礼貌与对offer的积极性不才是最正常,也正确的做法么?招聘方的错强加到应聘者身上,***何不食肉糜。
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务