HDU5512 Pagodas(GCD)

    xiaoxiao2021-03-25  157

    Problem Description n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, labelled from 1 to n. However, only two of them (labelled a and b, where 1a≠b≤n) withstood the test of time. Two monks, Yuwgna and Iaka, decide to make glories great again. They take turns to build pagodas and Yuwgna takes first. For each turn, one can rebuild a new pagodas labelled i (i∉{a,b} and 1≤i≤n) if there exist two pagodas standing erect, labelled j and k respectively, such that i=j+k or i=j−k. Each pagoda can not be rebuilt twice. This is a game for them. The monk who can not rebuild a new pagoda will lose the game. Input The first line contains an integer t (1≤t≤500) which is the number of test cases. For each test case, the first line provides the positive integer n (2≤n≤20000) and two different integers a and b. Output For each test case, output the winner (``Yuwgna" or ``Iaka"). Both of them will make the best possible decision each time. Sample Input 16 2 1 2 3 1 3 67 1 2 100 1 2 8 6 8 9 6 8 10 6 8 11 6 8 12 6 8 13 6 8 14 6 8 15 6 8 16 6 8 1314 6 8 1994 1 13 1994 7 12 Sample Output Case #1: Iaka Case #2: Yuwgna Case #3: Yuwgna Case #4: Iaka Case #5: Iaka Case #6: Iaka Case #7: Yuwgna Case #8: Yuwgna Case #9: Iaka Case #10: Iaka Case #11: Yuwgna Case #12: Yuwgna Case #13: Iaka Case #14: Yuwgna Case #15: Iaka Case #16: Iaka 这道题就是说有n个塔,最先开始有a,b两个塔,然后Yuwgna先手建一个新的塔,这塔的位置必需是i=j+k或者i=j-k, 这个条件很重要,有这个条件我们可以得出每次建塔的位置都是gcd(j,k),其实判断是可以建完所有塔的,所以判断 abs(n/gcd(a,b))是奇数还是偶数就可以了,涨一下姿势。 #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cctype> #include<cmath> #include<ctime> #include<string> #include<stack> #include<deque> #include<queue> #include<list> #include<set> #include<map> #include<cstdio> #include<limits.h> #define MOD 1000000007 #define fir first #define sec second #define fin freopen("/home/ostreambaba/文档/input.txt", "r", stdin) #define fout freopen("/home/ostreambaba/文档/output.txt", "w", stdout) #define mes(x, m) memset(x, m, sizeof(x)) #define Pii pair<int, int> #define Pll pair<ll, ll> #define INF 1e9+7 #define inf 0x3f3f3f3f #define Pi 4.0*atan(1.0) #define lowbit(x) (x&(-x)) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define max(a,b) a>b?a:b typedef long long ll; typedef unsigned long long ull; const double eps = 1e-12; const int maxn = 3000; using namespace std; inline int read(){ int x(0),f(1); char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } inline int gcd(int a,int b){ return b?gcd(b,a%b):a; } int main() { // fin; int t=read(); int n,a,b; for(int i=1;i<=t;++i){ scanf("%d%d%d",&n,&a,&b); printf("Case #%d: ",i); int ans=abs(n/gcd(a,b)); if(ans&1){ printf("Yuwgna\n"); }else{ printf("Iaka\n"); } } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-8047.html

    最新回复(0)