zoukankan      html  css  js  c++  java
  • HDU 4596 Yet another end of the world (数学,扩展欧几里德)

    题意:给出n组x,y,z。判断是否存在一个id使得id%x1∈(y1,z1),id%x2∈(y2,z2)。

    析:

    设 id/x1=a , id/x2=b ,则

    id-a*x1=u;   (1)

    id-b*x2=v;   (2)

    (1)-(2)得  一阶不定方程:  bx2-ax1=u-v .

    方程可解性为是否存在 (u-v) 是gcd(x1,x2)的整数倍。

    那么也就是判断y[x1]-z[x2], z[x1]-y[x2],这就是范围,然后在判断是的时候,如果两个端点能够整除,就返回真,如果两个端点除以g,

    不相等,那么一定有一个数能整除g。

    代码如下:

     

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    const int maxn = 1000 + 5;
    int x[maxn], y[maxn], z[maxn];
    int n;
    
    bool judge(int g, int l, int r){
        if(l % g == 0 || r % g == 0)  return true;
        return l / g != r / g;
    }
    
    bool solve(){
        for(int i = 0; i < n; ++i){
            for(int j = i+1; j < n; ++j){
                int  g = __gcd(x[i], x[j]);
                if(judge(g, y[i]-z[j], z[i]-y[j]))  return true;
            }
        }
        return false;
    }
    
    int main(){
        while(scanf("%d", &n) == 1){
            for(int i = 0; i < n; ++i)
                scanf("%d %d %d", &x[i], &y[i], &z[i]);
            if(solve())  puts("Cannot Take off");
            else  puts("Can Take off");
        }
        return 0;
    }
    

     

     

  • 相关阅读:
    Regexp:教程
    Regexp:目录
    笔记-C#:C# 方法、属性杂项-01
    Regexp:正则表达式应用——实例应用
    正则表达式:百科
    Regexp:template
    AngularJS:参考手册
    命令目录
    java实现连续数的公倍数
    java实现连续数的公倍数
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5716733.html
Copyright © 2011-2022 走看看