为了解决谁是跑的最快的奶牛的长期争论,贝茜和艾希决定在农场中来一场赛跑。
两头奶牛在同一时间从同一地点出发,朝同一方向奔跑。
每个奶牛的奔跑过程都可以划分为若干段。
在每一段行程中,奶牛的奔跑速度相同。
例如,贝茜可能首先以 的速度奔跑
单位时间,然后以
的速度奔跑
单位时间。
贝茜和艾希的总跑步时间相同。
两头奶牛希望你帮助计算在她们的赛跑中,领头者的变化次数。
当上一次的领头者是 的情况下,如果
超过了
,成为了领头者,那么领头者的变化就发生了。
例如,如果 是领头者,然后
超过了
,这就算是一次领头者的变化。
如果 是领头者,然后
追上了
并与他齐头并进一段时间,最终 A 超过了
,这也算是一次领头者的变化。
输入格式
第一行包含两个整数 和
,表示贝茜的奔跑过程可分为
段,艾希的奔跑过程可分为
段。
接下来 行,每行描述一段贝茜的奔跑过程,包含两个整数,分别表示贝茜的奔跑速度以及她以这个速度奔跑的时间(两个整数都在
范围内)。
接下来 行,每行描述一段艾希的奔跑过程,包含两个整数,分别表示艾希的奔跑速度以及她以这个速度奔跑的时间(两个整数都在
范围内)。
输出格式
输出赛跑中领头者的变化次数。
数据范围
输入样例:
4 3
1 2
4 1
1 1
2 10
2 3
1 2
3 9
输出样例:
2
样例解释 时,艾希保持领先位置。
时,贝茜追上艾希,并以相同速度奔跑一个单位时间。
随后贝茜提速,超过艾希(第一次领头者变化)。
短暂时间后,艾希提速,超过贝茜(第二次领头者变化)并保持领先至结束。
using namespace std;
typedef pair<int, int> PII;
const int N = 1010;
int n, m;
PII a[N], b[N];
int sa[N], sb[N];
int main(){
cin >> n >> m;
int tsum = 0;
for(int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y, sa[i] = sa[i-1]+a[i].y;
for(int i = 1; i <= m; i++) cin >> b[i].x >> b[i].y, sb[i] = sb[i-1]+b[i].y;
int t = 0, idx1 = 1, idx2 = 1;
int sm1 = 0, sm2 = 0;
int res = 0;
int last_head = 0;
while(t < sa[n]){
int time;
if(sa[idx1] < sb[idx2]) time = sa[idx1] - t;
else time = sb[idx2] - t;
t += time;
sm1 += time * a[idx1].x;
sm2 += time * b[idx2].x;
int cur_head = 0;
if(sm1 > sm2) cur_head = 1;
else if(sm2 > sm1) cur_head = 2;
if(last_head && cur_head && last_head != cur_head) res++;
if(cur_head) last_head = cur_head;
if(t >= sa[idx1]) idx1++;
if(t >= sb[idx2]) idx2++;
}
cout << res << endl;
return 0;
}