zoukankan      html  css  js  c++  java
  • HDU 1222

    题意:

      一头狼和一头兔子在一座山中,给你一个数n表示洞的个数,编号从0~n-1.兔子可以随意躲在其中一个洞中,狼每次都从编号为0的洞出发,接下来走到第m个洞中,问兔子能不能活下来,即不被狼吃掉.例如:当n = 8,m = 6时,狼走过的洞途径:0->6->4->0->6......,它没走过的洞还有1,2,3,5,7,所以兔子可以存活下来.

    分析:

      狼会一直在这n个洞中来回,它的模数就是n;它走过的圈数会增加且只有这一个变量,所以可以想到模线性方程组. mx ≡ k(mod n),x表示圈数,k表示洞的编号。变一下形:mx - k = ny(这个式子应该很容易得出,mx与k关于模n同余,mx = n*b + r, k = n*b' + r'; 同余那么r == r',所以mx - k = n*(b-b') => mx - k = ny). 贝祖等式: mx - ny = gcd(m, n). 模线性方程要有解,则k%gcd(m, n) == 0(k>0且k为正整数),gcd(m, n) = 1时,k从0~n-1中任取一个数都可以使得k%gcd(m, n)==0,所以此时兔子只有一条路就是死路;否则兔子可以存活下来.

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <fstream>
     5 #include <ctime>
     6 #include <cmath>
     7 #include <cstdlib>
     8 #include <algorithm>
     9 #include <set>
    10 #include <map>
    11 #include <list>
    12 #include <stack>
    13 #include <queue>
    14 #include <iterator>
    15 #include <vector>
    16 
    17 using namespace std;
    18 
    19 #define LL long long
    20 #define MOD 1000000007
    21 #define INF 0x3f3f3f3f
    22 #define MAXN 10000010
    23 #define MAXM 1000010
    24 #define inf 0x7fffffffffffffff
    25 #define maxf 0x7fffffff
    26 
    27 
    28 LL gcd(LL a, LL b)
    29 {
    30     return b == 0? a : gcd(b, a%b);
    31 }
    32 
    33 int main()
    34 {
    35     //如果n与m没有互素或者它们的公约数只有1
    36     int t;
    37     int m, n;
    38     scanf("%d", &t);
    39     while(t--)
    40     {
    41         scanf("%d%d", &m, &n);
    42         if(gcd(m,n) == 1)
    43             printf("NO
    ");
    44         else
    45             printf("YES
    ");
    46     }
    47 
    48     return 0;
    49 }
  • 相关阅读:
    PHP里json_encode()与json_decod()区别
    数组进行排序
    tp5利用自带上传类实现单个文件与多文件上传
    mkdir() Permission denied 报错问题
    如何快速熟悉新项目的代码?
    Tp5自定义路径写入日志
    spring解决循环依赖
    spring注解的使用
    ssm的整合
    编程知识总结
  • 原文地址:https://www.cnblogs.com/xl1164191281/p/5747102.html
Copyright © 2011-2022 走看看