zoukankan      html  css  js  c++  java
  • [NOI Online #2 提高组]涂色游戏 题解

    题目描述

    你有 1020 个格子,它们从 0 开始编号,初始时所有格子都还未染色,现在你按如下规则对它们染色:

    1. 编号是 p1 倍数的格子(包括 0号格子,下同)染成红色。
    2. 编号是 p2 倍数的格子染成蓝色。
    3. 编号既是 p1 倍数又是 p2 倍数的格子,你可以选择染成红色或者蓝色。

    其中 p1 和 p2 是给定的整数,若格子编号是 p1 或 p2 的倍数则它必须要被染色。在忽略掉所有未染色格子后,你不希望存在 k个连续的格子颜色相同,因为你认为这种染色方案是无聊的。现在给定 p1, p2, k,你想知道是否有一种染色方案不是无聊的。

    输入格式

    本题包含多组数据。

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

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

    输出格式

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

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

    输入输出样例

    输入 #1

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

    输出 #1

    No
    Yes
    Yes
    Yes
    

    输入 #2

    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
    

    输出 #2

    Yes
    Yes
    Yes
    No
    No
    No
    Yes
    Yes
    

    说明/提示

    测试点编号 p1, p2≤ k≤ T≤
    1 ∼ 3 15 1515 3375
    4 ∼ 6 10^3 10^3 10^4
    7 ∼ 8 10^3 10^3 10
    9 ∼ 10 10^5 10^3 10^3
    11 ∼ 12 10^5 5*10^5 10
    13 ∼ 14 10^5 5*10^5 10^5
    15 10^9 10^9 10
    16∼ 20 10^9 10^9 10^6

    对于所有测试点1≤T≤106,1≤p1,p2,k≤109

    分析

    我们设p1、p2互质,且p1<p2

    那么最坏的情况就是在[k( imes)p2+1,(k+1)( imes)p2-1]之间枚举p1的倍数

    区间长度=p2-2,我们只要将(frac{p2-2}{p1})+1的值与k比较就可以了

    需要注意两个细节

    1、k=1时要特判,直接输出No

    2、p1、p2有可能不互质,要除以它们的最大公因数

    代码

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    ll gcd(ll aa,ll bb){
        if(bb==0) return aa;
        return gcd(bb,aa%bb);
    }
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            ll aa,bb,k;
            scanf("%lld%lld%lld",&aa,&bb,&k);
            ll gys=gcd(aa,bb);
            aa/=gys,bb/=gys;
            if(aa>bb) swap(aa,bb);
    		if(k==1){
    			printf("No
    ");
    			continue;
    		}
            if(bb>2 && (bb-2)/aa+1>=k) printf("No
    ");
            else printf("Yes
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/liuchanglc/p/12790935.html
Copyright © 2011-2022 走看看