zoukankan      html  css  js  c++  java
  • 2016HUAS_ACM暑假集训4F

    这个题目,如果没找到方向,确实有点一头雾水。但是如果你找对方向了,AC是分分钟的事。答案就是看n和m是否有除1之外的公约数。

    简单证明:设n和m最大公约数不是1,假设为p。n和m总可以化为一个数乘以k的形式吧,不妨令n=a*k,m=b*k(暂时不知道有什么用); 那么狼第一次遍历的洞口编号为0,m,2m......(假设这些洞的编号都在n-1以内),假设狼第i次进洞会超过n-1,则此时本应该是i*m,但是i*m>n-1,所以这次洞口的编号是(i*m)%n,但是,但是,但是(i*m)%n=i*b*k-a*k=(i*b-a)*k。(a*k,b*k派上用场了)[if(b<a<2b),a%b=a-b],说明洞口的编号还是k的倍数啊。。。但是p>1,这样狼就无法遍历所有的山洞,那么兔子就是有地方可以躲的。

    题目大意:有n个山洞,编号为0~n-1,现在一只狼从0号洞口开始,每隔m-1(这里我对原题有点小疑问,原题是every m holes,但是案例是m-1才对)个洞进去抓兔子,问兔子最后能否躲过一劫。例如有n=6个洞,编号就是0、1、2、3、4、5,狼每隔m-1=1个洞去抓兔子,那么狼进入的山洞就是0、2、4、0、2、4......(无限循环了)。如果兔子躲在1、3、5号洞里,就是安全的。

    Sample Input

    2                              //测试案例数

    1  2                          //m和n

    2  2

    Sample Output

    NO

    YES

    #include<iostream>
    using namespace std;
    
    int T,m,n;
    int gcd(int a,int b)//这个求最大公约数函数最好自己记住,很重要的
    {
        return b==0?a:gcd(b,a%b);
    }
    
    int main()
    {
        cin>>T;
        while(T--)
        {
            cin>>m>>n;
            if(gcd(m,n)==1)
                cout<<"NO
    ";
            else
                cout<<"YES
    ";
        }
        return 0;
    }
  • 相关阅读:
    前后端反爬虫的一些奇怪姿势【转载】
    Scrapy 中常用的中间件和管道组件
    Jquery各个版本的区别
    userAgent
    操作系统
    手机类别
    移动端设备UA检测
    iPhone6的CSS3媒体查询
    所有设备的CSS像素
    解读所有设备的css像素的网站
  • 原文地址:https://www.cnblogs.com/ankelen/p/5743664.html
Copyright © 2011-2022 走看看