noj 2069 赵信的往事 [yy题 无限gcd]


njczy2010

2069

Accepted

31MS

  224K

1351Byte

G++

2014-11-13 13:32:56.0

坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再对x算一次,,,

赵信的往事

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 20            测试通过 : 2

描述

赵信——德玛西亚的总管,可谓一人之下,万人之上。但谁能想到,他以前在诺克萨斯的角斗场过的是怎样的生活?

那时,成千上万的奴隶或战俘被抓进角斗场,通过血腥的杀戮供贵族们取乐。所以,为了活下去,除了自身的实力之外,拉帮结派也是必不可少的。显然,这样的事只可能发生在互相信赖的人的中间,而在当时,人们互相信赖的标准却很奇怪——每个人都有一个编号,若两个人可以相互信赖,那么当且仅当这两个编号的素因子集合相同。

那么问题来了:

现在有三个人想组团,请问他们能相互信赖么?

输入

先输入一个正整数T,表示共有T组测试样例,1≤T≤10000。

对于每一个测试样例,输入三个正整数,对于第i个数pi,表示第i个人的编号(1≤pi≤109)。

输出

对于每组样例,如果可以可以成功组团,则输出“YES”,否则输出“NO”。

样例输入

2
3 6 9
3 9 27

样例输出

NO
YES

提示

对于样例一,6的素因子集合为{2,3},与其他人不同,所以不行;

对于样例二,所有数的素因子集合均为{3},因此可以组团。

题目来源

yuman

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<string>
 6 #include<iostream>
 7 #include<algorithm>
 8 #include<set>
 9 #define maxi(a,b) (a)>(b)?(a):(b)
10 #define mini(a,b) (a)<(b)?(a):(b)
11 #define N 1000005
12 #define mod 10000
13 #define ll long long
14
15 using namespace std;
16
17 int T;
18 int flag;
19 int a[5];
20
21 int gcd(int x,int y)
22 {
23     if(y==0)
24         return x;
25     return gcd(y,x%y);
26 }
27
28 void ini()
29 {
30     flag=1;
31     scanf("%d%d%d",&a[0],&a[1],&a[2]);
32     //printf("%d %d %d\n",a[0],a[1],a[2]);
33     sort(a,a+3);
34 }
35
36
37 void cal(int x,int y)
38 {
39     int g;
40     if(x==1 && y==1) return;
41     g=gcd(x,y);
42     x/=g;
43     y/=g;
44     if(x==1 && y==1) return;
45     else if(g==1 && y%x!=0){
46         flag=0;return;
47     }
48     else{
49         cal(x,g);
50     }
51     return;
52     //}
53 }
54
55 void solve()
56 {
57    // printf(" sss\n");
58     cal(a[0],a[1]);
59     cal(a[1],a[0]);
60     if(flag==0) return;
61   //  printf(" sss2\n");
62     cal(a[0],a[2]);
63     cal(a[2],a[0]);
64 }
65
66 void out()
67 {
68     //printf(" oooo\n");
69     if(flag==1){
70         printf("YES\n");
71     }
72     else{
73         printf("NO\n");
74     }
75 }
76
77 int main()
78 {
79    // freopen("data.in","r",stdin);
80     scanf("%d",&T);
81     while(T--)
82    // while(scanf("%I64d",&n)!=EOF)
83     {
84         ini();
85         solve();
86         out();
87     }
88     return 0;
89 }
时间: 2024-10-17 15:20:47

noj 2069 赵信的往事 [yy题 无限gcd]的相关文章

!HDU 4145--思维(yy题)--(细节)

题意:有两个中心点A,B,有其他n个点,每个点到中心点都有以它们的距离为半径的圆的辐射范围,求最小的辐射范围半径能覆盖所有的点. 分析:这题纯靠想解题方法.一开始方向走错了一直WA.开始的想法:每输入一个点就计算它到A,B的距离,只取较小值,不断更新结果.WA的过程中才慢慢发现这样做会有很多特殊情况,但当时都没想过要换思路,只是不断地增加代码讨论情况,下次一定记得发现方法有很多不足就转换思路.正确做法:每输入一个点只计算它到A点的距离,从大到小排序,遍历依次判断加入把这一点归到B的覆盖范围是否结

cf 215 C. Crosses yy题

链接:http://codeforces.com/problemset/problem/215/C C. Crosses time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There is a board with a grid consisting of n rows and m columns, the rows are n

【Luogu】P1072Hankson的趣味题(gcd)

这题真TM的趣味. 可以说我的动手能力还是不行,想到了算法却写不出来.以后说自己数论会GCD的时候只好虚了-- 我们首先这么想. x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x和a0不会再有除了1之外的公约数. 证明:设x/a1=c,a0/a1=d. 若有gcd(c,d)=y 则有p=c/y,q=d/y. 反之c=py,d=qy. 则有x=pya1,a0=qya1. 则x和a0共有公约数ya1. y属于正实数集,因此ya1>a1. 因此gcd(x,a0)=ya1. 又因为

CodeForces 66D--思维(yy)

题意:求n个两两不互质,但是整体互质的整数,如果不存在输出-1. 分析:yy题,找规律.整体互质只要满足其中三个互质就行了,用a,b,c这三个质数构造a*b,b*c,a*c这三个数,之后的n-3个数只要形如a*c*i这样的形式就行了 代码: #include<iostream> using namespace std; int main() { int n; cin>>n; if(n==2) cout<<"-1"<<endl; else{

Codeforces Round #426 (Div. 2)A B C题+赛后小结

最近比赛有点多,可是好像每场比赛都是被虐,单纯磨砺心态的作用.最近讲的内容也有点多,即便是点到为止很浅显的版块,刷了专题之后的状态还是~"咦,能做,可是并没有把握能A啊".每场网络赛,我似乎都没用上新学的东西,能用上新学东西的题我A不了...5555555555555555 这场CF,讲真,打的心态爆炸,首先A题无限WA,赛后看下WA的那组数据是输入有一个999999999的样例,死骗子,说好的数据是1e9呢,哪能有数据是1e10-1,于是用long long,一下子Accept接收不

概率DP入门题

一 概率问题的论文 1.算法合集之<信息学竞赛中概率问题求解初探> 2.有关概率和期望问题的研究 3.算法合集之<浅析竞赛中一类数学期望问题的解决方法> 二 入门题目 1.POJ 3744 Scout YYF I (简单题) 题意:一条路上有n个地雷 ,a[i]代表第i个地雷放的位置,求安全走过这段路的概率 分析:若第k个位置有地雷则安全走过这个位置的方案为在第k-1个位置跳两步概率为(1-p) 从反面考虑 已经安全走过了第i-1个雷 则在第i个雷的死掉的概率为 1-p(从走到a[

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

【luogu1072】Hankson 的趣味题 [数学]

P1072 Hankson 的趣味题 枚举gcd(x,b0)判断 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 #include<cmath> 6 #include<stack> 7 #include<algorithm> 8 using namespace std; 9 #define ll long lon

codeforces 397B On Corruption and Numbers-yy-(求区间内的整数能否凑成某一整数)

题意:求一段连续的整数能否凑成某一个整数n.区间内的整数使用次数不限 分析:这题的题面的硬币凑钱,所以我刚开始以为是dp,无限背包,但是发现不是背包问题,但我还是认为是个dp,于是写了一个转移方程,似乎是对的,准备写代码的时候才发现用dp的话,数组根本不可能开那么大 10^9,所以我确定不是dp,根据经验觉得应该是个yy题,于是开始手动找规律,发现:只要n在区间 k[l,r]里面,就能用区间内的整数凑成n,换句话说就是能找到一个合法的k即可,即:n/r <= n/l ,注意一点是:当n%r==0