【10.27 校内普及组】 小biu的闯关 题解
题解
解题思路
第一次表示的区间
A
A
A~
B
B
B
第二次表示的区间2
A
A
A~2
B
B
B
……
第k次表示的区间
k
A
kA
kA~
k
B
kB
kB
当k足够大的时候区间会有重合
那后面的数就都能表示
直接累加
k
k
k不用再枚举
代码
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int t;
long long a,b,x,y,ans;
int main()
{
scanf("%d",&t);
for (int i=1;i<=t;i++)
{
scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
ans=0;
long long j=1;
if (b<x)
if (x%b)
j=x/b+1;
else j=x/b;
while (1)
{
long long l=j*a,r=j*b,lx=(j+1)*a;
if (l>y) break; //出界
if (lx<=r+1) //是否有重合
{
ans+=y-max(x,l)+1;
break;
}
else
ans+=min(y,r)-max(x,l)+1;
j++;
}
printf("%lld\n",ans);
}
}