hdu 5512 Pagodas gcd()
来源:互联网 发布:手机百度云网络异常 编辑:程序博客网 时间:2024/05/29 18:49
Pagodas
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1137 Accepted Submission(s): 808
Problem Description
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
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 integern (2≤n≤20000) and two different integers a and b .
For each test case, the first line provides the positive integer
Output
For each test case, output the winner (``Yuwgna" or ``Iaka"). Both of them will make the best possible decision each time.
Sample Input
162 1 23 1 367 1 2100 1 28 6 89 6 810 6 811 6 812 6 813 6 814 6 815 6 816 6 81314 6 81994 1 131994 7 12
Sample Output
Case #1: IakaCase #2: YuwgnaCase #3: YuwgnaCase #4: IakaCase #5: IakaCase #6: IakaCase #7: YuwgnaCase #8: YuwgnaCase #9: IakaCase #10: IakaCase #11: YuwgnaCase #12: YuwgnaCase #13: IakaCase #14: YuwgnaCase #15: IakaCase #16: Iaka
Source
2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
Recommend
wange2014 | We have carefully selected several similar problems for you: 5932 5931 5930 5929 5928
以前好像做过,不过当时不是队友做的,就是瞎搞的,反正应该没弄清楚。
现在的思路是:
首先要确定区间内的数有多少个可以选,判断是奇数还是偶数,奇数Yuwgna胜,偶数Iaka胜。
给我的感觉是不断相减(辗转相除)找到最小的量,
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)#define mes(a,x,s) memset(a,x,(s)*sizeof a[0])#define mem(a,x) memset(a,x,sizeof a)#define ysk(x) (1<<(x))typedef long long ll;typedef pair<int, int> pii;const int INF =0x3f3f3f3f;int n;int cal(int a,int b){ if(b==0) return a; return cal(b,a%b);}int main(){ std::ios::sync_with_stdio(false); int a,b,T,kase=0;cin>>T; while(T--) { cin>>n>>a>>b; if(a>b) swap(a,b); int p=cal(b,a); int num= (a-1)/p+ (b-a)/p+1+ (n-b)/p; printf("Case #%d: ",++kase); puts(num&1?"Yuwgna":"Iaka"); } return 0;}
看了别人的代码后,直接n/p即可,因为p就是求gcd(a,b)。
两个操作 a+b和b-a,都有gcd|a+b,gcd|b-a,所以不管加减操作多少次都是gcd的倍数。
所以就是要求[1,n]内有多少个数是gcd的倍数。
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)#define mes(a,x,s) memset(a,x,(s)*sizeof a[0])#define mem(a,x) memset(a,x,sizeof a)#define ysk(x) (1<<(x))typedef long long ll;typedef pair<int, int> pii;const int INF =0x3f3f3f3f;int n;int cal(int a,int b){ return b==0?a:cal(b,a%b);}int main(){ std::ios::sync_with_stdio(false); int a,b,T,kase=0;cin>>T; while(T--) { cin>>n>>a>>b; int p=cal(a,b); int num= n/p; printf("Case #%d: ",++kase); puts(num&1?"Yuwgna":"Iaka"); } return 0;}
0 0
- HDU-5512 Pagodas(GCD)
- HDU 5512 Pagodas(GCD)
- hdu 5512 Pagodas gcd()
- HDU 5512 Pagodas (gcd)
- HDU-5512 Pagodas(GCD+找规律)
- HDU 5512 Pagodas (简单博弈 gcd)
- HDU 5512 Pagodas (水题+GCD )
- HDU 5512 Pagodas (GCD 博弈)
- hdoj 5512 Pagodas (gcd)
- hdoj 5512 Pagodas 【gcd 思维】
- HDU 5512 Pagodas
- hdu 5512 Pagodas
- HDU 5512 Pagodas【博弈】
- HDU 5512 Pagodas
- 【HDU 5512 Pagodas】
- HDU 5512 Pagodas
- HDU-5512-Pagodas
- HDU 5512 Pagodas(gcd + 奇偶性判断)——2015ACM/ICPC亚洲区沈阳站
- Enum类型详解
- [Leetcode]1. Two Sum
- 在lnmp服务器用file_put_contents函数写入文件无法写入的解决方法
- Android:30分钟弄明白Touch事件分发机制
- Directory Listing For解决方法-tomcat启动,首页报错
- hdu 5512 Pagodas gcd()
- [总结]视频质量评价技术零基础学习方法
- java,linux转义字符区别
- 人脸检测——Faster R-CNN
- LeetCode 206. Reverse Linked List 解题报告
- 更改NavigationView侧滑菜单文字颜色
- laravel框架 即点即改
- poj 3984 迷宫问题(BFS+路径输出)
- 析构函数