HDU 5512 题解

题意:给出n,再给出集合A中的两个整数j,k且j≠k,集合满足条件

若j,k∈A,j≠k,且1<=j-k<=n,则j-k∈A;

若j,k∈A,j≠k,且1<=j+k<=n,则j+k∈A;

若集合A中有偶数个数,则输出Iaka;若集合A中有奇数个数,则输出Yuwgna.

2<=N<=20000.共1~500组数据,1000MS

算法/思路:由于减法的存在,可由辗转相除法知道gcd(i,j)在集合中,进而至少有2*gcd(i,j)在集合中,借此可以得知gcd(i,j)的n以内的倍数都在集合A中,且集合A中的数显然都是gcd(i,j)的倍数,故集合中元素数=n/gcd(i,j)。

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int t,n,a,b,ans,tmp;

int gcd(int a,int b) {if (a%b==0) return b; else return gcd(b,a%b);}

int main(){
    cin>>t;
    for (int q=1;q<=t;++q){
        cin>>n>>a>>b;
        if (a<b) {tmp=a;a=b;b=tmp;}
        ans=n/gcd(a,b);
        cout<<"Case #"<<q<<": ";
        if (ans%2==0) cout<<"Iaka" ;else cout<<"Yuwgna";
        cout<<endl;
    }
    return 0;
}
时间: 2024-10-09 22:10:53

HDU 5512 题解的相关文章

【hdu 5512】【 2015ACM/ICPC亚洲区沈阳站】Pagodas 题意&题解&代码(C++)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5512 题意: 给出n个点和a,b两个初始被标记的点,每次可以选取已经被标记点中的两个点 i , j 来标记新点 i+j 或 i-j,两个人轮流标记,如果谁无法标记,谁输,输出赢的人. 题解: 首先我们发现当a,b互质时,它通过以上操作,一定能标记到1号点,接着所有点都可以标记,当a,b不互质时,多写几个数找规律发现gcd(a,b)倍数的位置都可以标记到. 代码: #include<iostream

HDU 5512 Meeting 博弈论

Meeting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5512 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

HDU 5512 Pagodas (gcd)

题目:传送门. 题意:t组数据,每组数据给定n,a,b,a!=b,在[1,n]的这些点中,每次选取a+b或a-b或b-a点,选取过的点在下次选取的时候可以当做ab来用继续选取,谁不能继续选取谁就输,问最后谁能赢. 题解:首先第一眼看这道题可能会想到博弈,然而这道题本质并不是博弈,而是gcd,因为选取的点一定是 gcd(a,b) 的倍数,可选取的点就是n/gcd(a,b)-2个,所以判断可选取点的奇偶性即可,如果是奇数那么先手赢,否则后手赢. #include <bits/stdc++.h> u

hdu - 1237 题解

题意:给出一个数字计算式,包含+,-,*,/四种符号,计算值 题解:最大坑点:不能仅仅判断第一个是0就结束计算,有可能有:0 + 1这样的情况 所以1.判断第一个是否是0,如果是,则判断下一个符号是否是'\n' 2.读入数字和运算符,如果是*,/,取出栈顶元素直接计算完成后压栈,如果是-,将数字相反数压栈,如果是+,将数字压栈. 3.计算栈内元素之和 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm>

2014年北京网络赛 Instrusive HDU 5040 题解 优先队列

网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点,若干墙,若干监视器,剩下的是空地. 起点,终点,监视器都算空地. 监视器初始值会指定一个方向,共有四个方向. 监视器每秒顺时针转动到下个方向. 监视器视野距离为2. 在监视器的位置或在监视器面向的格子是监视区域. 普通的移动一格需要消耗1秒时间. 在监视器下移动一格需要消耗3秒时间. 如果呆在原地不

hdu - 1231 题解

题意:最大连续子序列问题+输出答案所在的区间 题解:最大连续子序列问题状态转移方程:f[i]=max(a[i],f[i-1]+a[i]) 答案所在区间的话可以在递推求状态的时候,顺便记录一下当前位置所在的序列左端点是谁,最后扫描的时候记录下最优解的位置,然后这个位置就是右端点,记录过的数据就是左端点. 1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring&g

HDU 5573 题解

题意:关于一只要续命的青蛙(雾),一颗完全二叉树,它的标号正如我们所期望的根为1,左儿子为父节点*2,右儿子为父节点*2+1,然后老青蛙从根往下走,一共走K步,它需要n个灵魂,每走过一个点,可以减去或加上这个点的标号,输出一种可能方案,输入数据保证至少有一组解 1=<n<=1e9,N<=2k<=260 共1~100组数据,1000MS 题解/思路:其实这道题找一下规律就好了,你会发现最左边两条路径分别可以表示±1,±3,--,±(2k-1)和±2,±4,--,±2k,所以只需判断这

HDU - 5512 Pagodas

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 1≤a≠b≤n) withstood the test of time. Two monks, Yuwgna and Iaka, decide to mak

hdu 5418 题解

第一眼看到这题,哇,这不是我刚做完的题吗?大水题!然后 这题表面很水,实际上有点坑. 题意 求经过 $ 1 - n $(不能遗漏) 并且回到 $ 1 $ 的最短路. 在看这题之前我们可以来看下这题 最短Hamilton路 这道题的要求是我们要让每个点不重不漏的经过并且最终到达 $ n-1 $ 我们看数据范围,就可以直接状压dp,枚举状态. 由于题目已经给出最短路,便可以直接计算 #include<bits/stdc++.h> using namespace std; int n,a[30][3