题意:多组输入,在一维空间中给你一个范围a-b,给你一个站点这个站点有一个半径为r的覆盖范围,问:从a->b以每秒走1个单位长度的速度,其中在走完a,b时间内,其中有多少时间未在这个站点的覆盖范围内。
思路:a->b的总时间是max(a,b)-min(a,b);仅需判断站点位于ab之间还是位于ab之外就行。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll a,b,x,r;
cin>>a>>b>>x>>r;
ll min1=min(a,b);
ll max1=max(a,b);
a=min1;
b=max1;
ll w=x-r;
ll z=x+r;
ll ans;
if(z<=a||w>=b) ans=0;
else
{
if(w<=a)
{
ans=min(b-a,z-a);
}
else if(z>=b)
{
ans=min(b-a,b-w);
}
else ans=z-w;
}
ans=b-a-ans;
cout<<ans<<endl;
}
return 0;
}