zoukankan      html  css  js  c++  java
  • HihoCoder 1473 : 小Ho的强迫症( 欧几里得 )

    描述

    小Ho在一条笔直的街道上散步。街道上铺着长度为L的石板,所以每隔L距离就有一条石板连接的缝隙,如下图所示。

    小Ho在散步的时候有奇怪的强迫症,他不希望脚踩在石板的缝隙上。(如果小Ho一只脚的脚尖和脚跟分别处于一条缝隙的两侧,我们就认为他踩在了缝隙上。如果只有脚尖或脚跟接触缝隙,不算做踩在缝隙上)  

    现在我们已知小Ho两只脚的长度F以及每一步步伐的长度D。如果小Ho可以任意选择起始位置,请你判断小Ho能否保持不踩缝隙散步至无穷远处?

    输入

    第一行是一个整数T,表示测试数据的组数。

    每组测试数据包含3和整数L, F和D,含义如上文所述。

    对于30%的数据: L <= 1000  

    对于60%的数据: L <= 100000

    对于100%的数据: L <= 100000000, F <= 100000000, D <= 100000000, T <= 20

    输出

    对于每组数据输出一行YES或者NO,表示小Ho是否能走到无穷远处。

    样例输入

    2  
    60 26 60  
    30 26 75 

    样例输出

    YES  
    NO

     【题解】:

    (HihoCoder上面的大多数题解都是靠直播,所以在下没有机会看题解,这是早期的唯一一次有题解的题,比较详细,感觉看完对GCD的理解又加深了。)

    题解的意思是对地板长度L和迈步跨度D,gcd(L,D)是循环单位元,L/gcd为一个循环节。

    举个栗子,L=20,D=12,gcd=4,那么踩到的位置有X0,X0+4,X0+8,X0+12,X0+16。

    假设第一步是0,那么第二步是12,第三步是24%20=4,第4步是36%20=16;第五步是48%20=8; 下一步又回到X0,刚刚一个循环,而且每个数出现的次数是均匀(一样的)的。

    那么只需要保证最右的前脚尖不超过线即可。即X0+L-gcd <= L-F,X0=0时最右边比较靠左,即F<=gcd。 

     

     

    而如果问不同解个数,则为gcd个。

    #include<iostream>  
    #include<algorithm>  
    #include<cstdio>  
    #include<cmath>  
    using namespace std;  
    int main()
    {
        int D,L,F,T;
        scanf("%d",&T);
        while(T--){
            scanf("%d%d%d",&L,&F,&D);
            if(__gcd(L,D)>=F) printf("YES
    ");
            else printf("NO
    ");
        } return 0;
    }
  • 相关阅读:
    Jzoj4822 完美标号
    Jzoj4822 完美标号
    Jzoj4792 整除
    Jzoj4792 整除
    Educational Codeforces Round 79 A. New Year Garland
    Good Bye 2019 C. Make Good
    ?Good Bye 2019 B. Interesting Subarray
    Good Bye 2019 A. Card Game
    力扣算法题—088扰乱字符串【二叉树】
    力扣算法题—086分隔链表
  • 原文地址:https://www.cnblogs.com/hua-dong/p/8456483.html
Copyright © 2011-2022 走看看