本文主要是介绍HDU5512 Pagodas(博弈),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:有n个位置修建佛塔,每个地方只能被修建一次,初始有a,b两个位置,每次修建的位置要满足,是i=k+j或者i=k-j。这样两个人轮流继续,不能修建者输。
解法:一位大神说,博弈论。看到a-b,就往gcd上想,大胆猜测 n/gcd(a,b)的奇偶
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define cl(a,b) memset(a,b,sizeof(a))
const int maxn=105;
const int inf=1<<23;int main(){int t,a,b,n;int cas=1;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&a,&b);printf("Case #%d: ",cas++);if(n/__gcd(a,b)%2!=0){puts("Yuwgna");}else {puts("Iaka");}}return 0;
}
这篇关于HDU5512 Pagodas(博弈)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!