 RROUNDS - Colliding Race

Initially two people start from the same point of circular track and move in same direction. But as one has more speed than other so before completion of x rounds person with higher speed will cross the other person some y times.

When person with more speed relative to other person complete one round of track then it will must cross the person to move further.

Relative speed = abs(speed of 1st – speed of 2nd)

Let person with higher speed = v1
Let person with lower speed = v2

As person with higher speed have to cover x rounds so total time take:
Total time = x * Circumference of track / v1

In this total time how many time 1st person cover full track w.r.t 2nd persom is:
(relative speed * total time) / circumference of circle

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define MOD 1000000007

int main()
{
ll test;
cin >> test;
while (test--)
{
ll a, b, x, r;
cin >> x >> r >> a >> b;
ll relative_speed = abs(a - b);
ll max_speed = max(a, b);
ll ans = 0;
//if both are at the end point when person with higher speed complete x
//rounds then crossing wil not occur so substract -1
if ((x * relative_speed) % max_speed == 0)
{
ans--;
}
ans += ((x * relative_speed) / max_speed);
cout << ans << endl;
}
return 0;
}
1 Like

Thank you for the explanation.