题目描述
小A同学和小B同学的赛车从同一个起点出发,并且他们的总用时一样。我们用“片段”法记录赛车的前进过程,例如,小A的赛车以1的速度运行2个单位时间,然后以4的速度运行1个单位时间。
裁判员想知道,这两辆赛车交替成为第一名的次数。例如,如果一开始小B的车子领先,然后小A车子超越小B,那么这就是一次第一名位置的交替。如果一开始小B的车子领先,然后A与B一样快,并僵持一段时间,然后最终小A领先,那么这也就意味着第一名位置的交替,但是,如果直到比赛结束小A都没有取得领先,那么不算第一名位置的交替。
输入
第1行:两个整数用空格隔开,N和M(1<=N,M<=1000)
第2到1+N行:每一行包含一个小A的赛车跑的N段路程,由两个整数描述:第一个数表示速度和第二个数表示以该速度运行的时间(两个整数都在1到1000范围内)。
第2+N到1+N+M行:每一行包含一个小B的赛车跑的M段路程,由两个整数描述:第一个数表示速度和第二个数表示以该速度运行的时间(两个整数都在1到1000范围内)。
输出
一行:第一名位置的交替次数。
样例输入 Copy
4 3
1 2
4 1
1 1
2 10
2 3
1 2
3 9
样例输出 Copy
2
提示
输入说明:
小A的赛车以1的速度跑2单位的时间,然后以4的速度跑1单位的时间,然后以1的速度跑1单位的时间,最后以2的速度跑10单位的时间。
小B的赛车以2的速度运行3个单位的时间,然后以1的速度运行2个单位的时间,最后以3的速度运行9个单位的时间。
请注意,这两辆车的总用时一样,都是跑了14个单位的时间。
输出说明:
小B的赛车领先,直到时间t=3,当两辆赛车都经过了6个单位的距离后相遇,并一起跑了1个单位的时间。小A的赛车随后短暂领先(第一次第一名位置的交替),但不久t=7时就被小B的赛车超越(第二次第一名位置的交替)。最后小B的赛车赢得了比赛。
错误代码:
#include<bits/stdc++.h>
#define MX 1000000
#define NX 1000
using namespace std;
int s1[MX + 10] = {0},s2[MX + 10] = {0};
int main()
{
int n,m,i,j,av[NX + 10],at[NX + 10],bv[NX + 10],bt[NX + 10];
cin >> n >> m;
long long int cnt = 0,ans = 0,k1 = 1,t1 = 0,k2 = 1,t2 = 0;
for (i = 1;i <= n;i++)
{
cin >> av[i] >> at[i];
}
for (i = 1;i <= m;i++)
{
cin >> bv[i] >> bt[i];
}
for (i = 1;i <= 1000000;i++)
{
if (k1 > n)
{
break;
}
s1[i] = s1[i - 1] + av[k1];
t1++;
if (t1 >= at[k1])
{
k1++;
t1 = 0;
}
}
for (i = 1;i <= 1000000;i++)
{
if (k2 > m)
{
break;
}
s2[i] = s2[i - 1] + bv[k2];
t2++;
if (t2 >= bt[k2])
{
k2++;
t2 = 0;
}
}
for (i = 1;i <= 1000000;i++)
{
if ((s1[i] > s2[i] && s1[i - 1] <= s2[i - 1]) || (s2[i] > s1[i] && s2[i - 1] <= s1[i - 1]))
{
ans++;
}
}
cout << ans - 1 << endl;
return 0;
}
```c++
```