“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 A-张老师和菜哭武的游戏(GCD)
地址:https://ac.nowcoder.com/acm/contest/5477/A
解析:刚开始,集合里有a,b。然后张拿了一个数p,满足a+b/a-b,放入集合。不断进行的话,集合里就会存在各种的a*x+b*y了。所以如果p可以被拿走,是要满足:a*x+b*y=p的。那么p就是gcd(a,b)的倍数(因为x,y可能是负数)。n/gcd(a,b)可以求出1-n中有几个数是gcd(a,b)的倍数,如果有奇数个,根据游戏顺序,张老师胜,否则输。
//从新开始~ #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<map> using namespace std; typedef long long ll; const int maxn=2e5+10; int main() { int t; cin>>t; while(t--) { int n,a,b; cin>>n>>a>>b; if(n/(__gcd(a,b))%2!=0) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }