【思維】【GCD】HDU 5512 Pagodas
阿新 • • 發佈:2018-12-15
【題意】兩個人往集合中放數,放的數是已經有的數其中兩個數的和或者差,放的數不能小於1或大於n,放下最後一個數的人獲勝,給出n和最初在集合中的2個數,問誰獲勝。
【思路】用兩個數反覆做和差,最後總會出現一個等差數列,也就是說這個遊戲並沒有策略,無論怎麼玩結果都會是既定的。這個等差數列的公差就是gcd(a,b),然後求出這個等差數列的項數,它的奇偶性就是答案。
【程式碼】
#include<bits/stdc++.h> #define fuck(x) std::cout<<"["<<#x<<"->"<<x<<"]"<<endl; using namespace std; typedef long long ll; const int M=2e5+5; const int inf=1e9+5; int gcd(int a,int b) { if(a<b) swap(a,b); return a%b==0?b:gcd(b,a%b); } int main() { int _,cas=0; scanf("%d",&_); while(_--) { cas++; int n; int a,b; scanf("%d%d%d",&n,&a,&b); if(n/gcd(a,b)%2==0) printf("Case #%d: Iaka\n",cas); else printf("Case #%d: Yuwgna\n",cas); } return 0; }