zoukankan      html  css  js  c++  java
  • 2013 南京邀请赛 K题 yet another end of the world

     1 /**
     2 大意:给定一组x[],y[],z[]   确定有没有两个不同的x[i], x[j] 看是否存在一个ID使得
     3      y[i]<=ID%x[i]<=z[i]
     4      y[j]<=ID%x[j]<=z[j]
     5 设ID%x[i] = a   ID%x[j] = b 
     6 ===〉ID+x[i]*x=a,   ID+x[j]*y = b;
     7 两式相减得   x[j]*y - x[i]*x = b-a;
     8 若是有解 就是(b-a)%gcd(x[i],x[j]) == 0
     9 就是看b-a的范围内是否有数是 gcd(x[i],x[j])  的倍数
    10 因为       y[j]<=b<=z[j]          y[i]<=a<=z[i]
    11 所以       y[j]-z[i]<=b-a<=z[j]-y[i]
    12 
    13 欠缺; 还是思路不够,,做题太少。。
    14 **/
    15 
    16 #include <iostream>
    17 #include <algorithm>
    18 using namespace std;
    19 long long x[1010],y[1010],z[1010];
    20 
    21 long long gcd(long long a,long long b){
    22     if(b==0)
    23         return a;
    24     return gcd(b,a%b);
    25 }
    26 
    27 bool check2(int d,int l,int r){
    28     if(l%d==0||r%d==0)
    29         return true;
    30     if((r-l+1)>=d)
    31         return true;
    32     int t1 = l/d;
    33     int t2 = r/d;
    34     if(t1!=t2)
    35         return true;
    36     else
    37         return false;
    38 }
    39 
    40 bool check(int i,int j){
    41     if(y[i]>z[j]||y[j]>z[i]){
    42         if(z[j]<y[i])
    43             swap(i,j);
    44         long long d = gcd(x[i],x[j]);
    45         if(check2(d,y[j]-z[i],z[j]-y[i]))
    46             return true;
    47         else
    48             return false;
    49     }else
    50         return true;
    51 }
    52 
    53 int main()
    54 {
    55     int n;
    56     while(cin>>n){
    57         for(int i=0;i<n;i++)
    58             cin>>x[i]>>y[i]>>z[i];
    59         bool flag = false;
    60         for(int i=0;i<n;i++){
    61             for(int j=i+1;j<n;j++){
    62                 if(check(i,j)){
    63                     flag = true;
    64                     break;
    65                 }
    66             }
    67         }
    68         if(!flag){
    69             cout<<"Can Take off"<<endl;
    70         }else{
    71             cout<<"Cannot Take off"<<endl;
    72         }
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    centos下部署启动elasticsearch错误集合与解决方案
    rpm和yum的区别
    centos7 安装Jdk1.8.0
    nvm-windows安装
    linux运行.sh命令
    centos7 安装 nvm
    centos7 安装、使用git
    转载:centos安装redis
    centos7 安装Node.js并配置为全局可用
    前端代码tomcat下简单部署
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724180.html
Copyright © 2011-2022 走看看