HDU-5512 Pagodas(GCD)

来源:互联网 发布:linux 通配符 编辑:程序博客网 时间:2024/06/05 06:24

题目大意:有N个点,刚开始给出两个点a,b(a != b)
现在有两个人再玩一个游戏,游戏规则如下:每次只能选择a + b或a - b或b -a的中的任意一个没被选中的符合[1,n]的点
问最后谁一个点也选不了了

解题思路:能被选的点其实只有n / GCD(a,b),为什么呢,因为初始的a和b决定了塔的间距,最后只要判奇偶即可

#include <cstdio>#include <cstring>int n, a, b, cas = 1;int gcd(int a, int b) {    if (a % b == 0) return b;    return gcd(b, a % b);}void solve() {    scanf("%d%d%d", &n, &a, &b);    if (a < b) {        a = a ^ b;        b = a ^ b;        a = a ^ b;    }    int mod = gcd(a, b);    if ((n / mod) % 2) printf("Case #%d: Yuwgna\n", cas++);    else printf("Case #%d: Iaka\n", cas++);}int main() {    int test;    scanf("%d", &test);    while (test--) solve();    return 0;}
0 0