Pagodas HDU - 5512 (博弈+gcd)

xiaoxiao2021-02-27  207

题意:

初始给你a,b两座塔,然后有两个人轮流建塔,可以建的位置满足存在j,k使得当前要建的塔位置i,i=j+k或者i=j-k,然后不能再建塔的人输,问谁赢

思路:

可以观察发现到塔的位置一定是ax+by,x,y是系数,然后满足这个数在1到n之间 可以猜想一下,不论建造顺序是什么,一定可以把所有满足ax+by的位置建到,(至于证明我不会呀) 现在只需要算出有多少个这样的位置就好了,由gcd的性质可以知道,ax+by一定是gcd(a,b)的倍数。 然后算一下输出答案就可以了

代码:

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int kase=0; void solve(); int main() { int T; kase=0; scanf("%d",&T); while(T--){ kase++; solve(); } return 0; } void solve() { int n,a,b; scanf("%d %d %d",&n,&a,&b); int g=__gcd(a,b); int ans=n/g; printf("Case #%d: ",kase); if(ans&1){ puts("Yuwgna"); } else{ puts("Iaka"); } }
转载请注明原文地址: https://www.6miu.com/read-10602.html

最新回复(0)