# PROBLEM LINK:

* Author:* Halry Bhalodia

*Rishabh Rathi*

**Tester:**# DIFFICULTY:

CAKEWALK

# PREREQUISITES:

Simple Geometry

# PROBLEM:

Ted’s house was present at x=x_1, Robin’s house was at x=x_2 and Barney’s house was at x=x_3 **(All houses are present on X-axis)**. Barney has arranged lasers around his house in a circle of a certain radius R, i.e. from x=x_3, there are lasers at a distance ≤ R on both sides so that he can save his best bro from being committed in a relationship.

Find out how much distance will Ted walk without struggling in the laser.

# EXPLANATION:

**Total distance** between Ted and Robin’s house = |x_1-x_2|

Following are the cases:

- If circle is covering none of Ted’s and Robin’s house → ans is
**total distance** - If Robin and Ted live in same house → ans is
**0** - If radius of circle is 0 → ans is
**total distance** - If the circle is between Ted’s and Robin’s house but does not cover them → then ans is
**[total distance – (2*R)]** - If circle is between Ted’s and Robin’s house and completely cover them → then ans is
**0** - If circle covers left house → then ans is
**[total distance – (x_3 + R - min(x_1, x_2))]** - If circle covers right house → then ans is
**[total distance – (max(x_1,x_2) – (x_3-R))]**

# SOLUTIONS:

## Setter's Solution - Python

```
t = int(input())
for i in range(t):
x1, x2, x3, r = list(map(int,input().split()))
l = x3-r
h = x3+r
a, b = min(x1, x2), max(x1, x2)
tot = b - a
if h<a or l>b:
ans = tot
elif tot == 0:
ans = 0
elif r == 0:
ans = tot
elif l>=a and h<=b:
ans = tot-(2*r)
elif l<=a and h<=b:
ans = tot-(h-a)
elif l>=a and b<=h:
ans = tot-(b-l)
else:
ans = 0
print(ans)
```

## Tester's Solution - Cpp

```
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
ll t, x1, x2, x3, r, left, right, a, b, total, ans;
cin>>t;
while(t--) {
cin>>x1>>x2>>x3>>r;
left = x3-r;
right = x3+r;
a = min(x1, x2);
b = max(x1, x2);
total = b - a;
if (right<a || left>b)
ans = total;
else if (total == 0)
ans = 0;
else if (r == 0)
ans = total;
else if (left>=a && right<=b)
ans = total-(2*r);
else if (left<=a && right<=b)
ans = total-(right-a);
else if (left>=a && b<=right)
ans = total-(b-left);
else
ans = 0;
cout<<ans<<endl;
}
return 0;
}
```

Feel free to share your approach. In case of any doubt or anything is unclear please ask it in the comment section. Any suggestions are welcomed.