简单博弈
首先如果n是偶数,那么第一个人干什么,第二个人可以跟着干什么,第一个人必输
齐次当n是奇数,那么如果第一个人能一次把其中一个红包拆到不可再拆的状态,就必胜了。
这时判断k是否为1,如果不是,则判断m的最大因数是否超过k即可
#include <bits/stdc++.h> using namespace std; const int N=1e6+7,M=1e6; const int p=998244353; const double eps=1e-9,pi=acos(-1.0); int tt; int n,m,cnt=0,id=1,num=0,len=200000; int k; void solve(){ scanf("%d%d%d",&n,&m,&k); if(n%2==0){ puts("Bong"); return; } int tmp=0; for(int i=2;i*i<=m;i++){ if(m%i==0){ tmp=i; break; } } if(k==1){ puts("Bing"); return; } if(tmp==0){ puts("Bong"); return; } if(m/tmp>=k)puts("Bing"); else puts("Bong"); } signed main(){ tt=1; while(tt--){ solve(); } return 0; }