小明和小红在 100 m 100m 100m 跑道上练习折返跑,小明以 a a a 米每秒的速度匀速跑步,小红以 b b b 米每秒的速度匀速跑步,小明跑得比小红快(即 a > b a>b a>b )。假设他们同时出发,问小红跑一个来回的时间内,小明和小红相遇了几次。
注意起点处不算相遇,若两人在结束时同时到达终点处则算相遇(具体可参见样例)。
输入格式
第一行一个整数
T
T
T (
1
≤
T
≤
10
1≤T≤10
1≤T≤10) ,代表数据组数。
下面 T T T 行每行两个整数 a , b a,b a,b ( 1 ≤ a ≤ b ≤ 100 1≤a≤b≤100 1≤a≤b≤100) 分别表示小明和小红的速度。
#include <bits/stdc++.h>
using namespace std;
int T;
double vMing, vHong;
struct line {
double k, b, begin, end;
};
int cnt;
bool cross(line l1, line l2, double left, double right)//(left,right]
{
if (l1.k == l2.k)
{
return false;
}
double crossX = ((l2.b - l1.b) / (l1.k - l2.k));
if (crossX > left&&crossX <= right && l1.k*crossX + l1.b >= 0)
{
return true;
}
return false;
}
int main()
{
cin >> T;
while (T--)
{
cnt = 0;
cin >> vMing >> vHong;
double TMing = 100 / vMing;
double THong = 100 / vHong;
int i = 1;
while ((i - 1)*TMing <= 2 * THong)
{
line l1;
if (i & 2)
{
l1.k = vMing;
l1.b = -100 * i + 100;
l1.begin = (i - 1)*TMing;
l1.end = i * TMing;
}
else
{
l1.k = -vMing;
l1.b = 100 * i;
l1.begin = (i - 1)*TMing;
l1.end = i * TMing;
}
line l2;
if ((i - 1)*TMing <= THong)
{
l2.k = vHong;
l2.b = 0;
}
else
{
l2.k = -vHong;
l2.b = 200;
}
cnt += cross(l1, l2, l1.begin, l1.end);
i++;
}
cout << cnt << endl;
}
}