题目链接:http://codeforces.com/contest/1055/problem/C
题目思路:找到最大公因数,然后la,ra对ta取余,lb,rb对tb取余,然后求得la,lb之差,然后枚举k倍的最大公因数+la,算最大,这样时间复杂度太高,就直接将差/最大公因数=temp,枚举temp-1,temp,temp+1,求出最大值
AC代码
#include<bits/stdc++.h>
using namespace std;
int la,ra,ta;
int lb,rb,tb;
int laa,raa,taa;
int lbb,rbb,tbb;
int dis()
{
if(raa<lbb||rbb<laa)
return 0;
return min(raa,rbb)-max(laa,lbb)+1;
}
int main()
{
scanf("%d%d%d",&la,&ra,&ta);
scanf("%d%d%d",&lb,&rb,&tb);
la=la%ta;
ra=ra%ta;
lb=lb%tb;
rb=rb%tb;
int temp=__gcd(ta,tb);
int ans=0;
if(la<=lb)
{
int dif=lb-la;
dif=dif/temp;
for(int i=dif-1;i<=dif+1;++i)
{
laa=la+temp*i;
raa=ra+temp*i;
lbb=lb;
rbb=rb;
ans=max(ans,dis());
}
}
else
{
int dif=la-lb;
dif=dif/temp;
for(int i=dif-1;i<=dif+1;++i)
{
laa=la;
raa=ra;
lbb=lb+temp*i;
rbb=rb+temp*i;
ans=max(ans,dis());
}
}
printf("%d\n",ans);
}