Mail.Ru Cup 2018 Round 2C(__gcd)


#include<bits/stdc++.h>
using namespace std;
long long mx(long long l1,long long r1,long long l2,long long r2){
  return max(0LL,min(r1,r2)-max(l1,l2)+1);
}
int main(){
  long long l1,r1,t1,l2,r2,t2;
  while(~scanf("%lld%lld%lld%lld%lld%lld",&l1,&r1,&t1,&l2,&r2,&t2)){
    l1++;//从0开始加一变为从1开始
    r1++;
    l2++;
    r2++;
    long long mnsuojin=__gcd(t1,t2);//有最大公约数又对不齐会导致一直对不齐(某些情况),mnsuojin是可移动的最小距离
    long long daierta=abs(r1-r2)/mnsuojin*mnsuojin;//避免超时所以一步到位
    long long ans=0;
    if(r1==r2)
    ans=mx(l1,r1,l2,r2);
    else if(r1<r2){
      r1+=daierta;
      l1+=daierta;
      ans=max(mx(l1,r1,l2,r2),mx(l1+mnsuojin,r1+mnsuojin,l2,r2));//前者和后者必定存在一个最优解
    }
    else if(r1>r2){
      r2+=daierta;
      l2+=daierta;
      ans=max(mx(l1,r1,l2,r2),mx(l1,r1,l2+mnsuojin,r2+mnsuojin));
    }
    printf("%lld ",ans);
  }
  return 0;
}

保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
原文地址:https://www.cnblogs.com/ldudxy/p/10045537.html