涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )

题目背景

1s 256M

题目描述

你有 1020个格子,它们从 0 开始编号,初始时所有格子都还未染色,现在你按如下规则对它们染色:
编号是 p1 倍数的格子(包括 00 号格子,下同)染成红色。
编号是 p 2倍数的格子染成蓝色。
编号既是 p1倍数又是 p 2倍数的格子,你可以选择染成红色或者蓝色。
其中 p1和 p2是给定的整数,若格子编号是 p1或 p2的倍数则它必须要被染色。在忽略掉所有未染色格子后,你不希望存在 kk 个连续的格子颜色相同,因为你认为这种染色方案是无聊的。现在给定 p1 , p2, k,你想知道是否有一种染色方案不是无聊的。

输入格式

本题包含多组数据。

第一行一个整数 T表示数据组数。

每组数据一行三个正整数 p1 , p2 , k,变量意义见题目描述。

输出格式

对于每组数据,输出一行一个字符串,若存在一种染色方案不是无聊的,则输出 YES,否则输出 NO。

选手程序输出结果与样例或题面中的一种格式相符即可,即不区分大小写。例如,如果标准答案为 YES ,则输出结果 YES/Yes/yes 都视为正确。

输入样例

4
2 10 4
2 3 6
1 4 7
1 1 2

输出样例

No
Yes
Yes
Yes

输入样例

8
370359350 416913505 3
761592061 153246036 6
262185277 924417743 5
668232501 586472717 2
891054824 169842323 6
629603359 397927152 2
2614104 175031972 68
924509243 421614240 4

输出样例

Yes
Yes
Yes
No
No
No
Yes
Yes
在这里插入图片描述

思路分析:

1.设p1<p2,且互质,如果不互质,两边除 gcd(p1,p 2) 即可,
则最坏的情况,也就是从 kp2+1 到 (k+1)p2-1这个连续串内塞 p1所对应的颜色,这样就有(p2-2)/p1+1 个连续块,将其与 k比较即可。
2.注意,当k=1时,无论怎么涂都是No!!!

C++代码如下:

#include <iostream>
using namespace std;
long long p1,p2,k,t;
long long gcd(long long a,long long b)
    return !b?a:gcd(b,a%b);
int main()
{
	cin>>t; 
    while (t--)
    {
        cin>>p1>>p2>>k;
        if (k==1)
        {
            cout<<"NO"<<endl;
            continue;
        }
        if (p1>p2)
            swap(p1,p2);
        long long x=gcd(p1,p2);
        p1/=x;
        p2/=x;
        if(p2>2 && (p2-2)/p1+1>=k)
        	cout<<"NO"<<endl;
        else
        	cout<<"YES"<<endl;
    } 
    return 0;
}

子序列问题sequence(【CCF】NOI Online能力测试2 提高组第二题 )
游戏match(【CCF】NOI Online能力测试2 提高组第三题 )

发布了172 篇原创文章 · 获赞 486 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_45884316/article/details/105748028