Link.
There is a nice approach to this problem that involves some physical insight.
In the following we’ll refer to Takahashi as A and to Aoki as B.
Without loss of generality, assume $A_1 > B_1$. Consider A’s relative motion with respect to B, i.e. imagine B is always at rest. The relative velocity of A is $A_1 – B_1$ for the first $T_1$ minutes and $A_2 – B_2$ for the subsequent $T_2$ minutes.
Let $S = (A_1 – B_1) T_1 + (A_2 – B_2) T_2$, we have
- if $S > 0$, A and B never meet,
- if $S = 0$, they meet infinitely many times,
- if $S < 0$, they meet some finite number of times.
In case $S < 0$, it’s not hard to figure out the number of times A and B meet.
code
int main() {
ll t1, t2;
ll a1, a2, b1, b2;
scan(t1, t2, a1, a2, b1, b2);b1 -= a1;
b2 -= a2;
if (b1 < 0) {
b1 = -b1;
b2 = -b2;
}
ll s = b1 * t1 + b2 * t2;
if (s == 0) {
println("infinity");
} else if (s > 0) {
println(0);
} else {
s = -s;
ll k = b1 * t1 / s;
ll ans = 2 * k;
if (b1 * t1 % s == 0) {
++ans;
} else {
ans += 2;
}
println(ans - 1); // -1 because we do not count the start of the run as a meet
}
return 0;
}