```c
#include <stdio.h>
int main()
{
int a,b,i,j,k=0,sa=0,sb=0,m=0,n=0;
scanf("%d%d",&a,&b);
int c[1000][2],d[1000][2];
for(i=0;i<a;i++)
scanf("%d%d",&c[i][0],&c[i][1]);
for(i=0;i<b;i++)
scanf("%d%d",&d[i][0],&d[i][1]);
for(i=j=0;i<a;)
{
sa+=c[i][0];
c[i][1]--;
sb+=d[j][0];
d[j][1]--; //按每秒分别计算两人位置
n=sa-sb; //计算位置差,这里以SH领先为正
if(n!=0) //如果有差距再进一步判断
{
long h=n*m;
if(m==0) //消除从起点领先的变化次数
{
m=n;
}
else
{
if(h<0) //只有位置差为异号时对顺序变化次数加一
{
k++;
m=n; //储存最新一次位置情况
}
}
}
if(c[i][1]==0) //判断某时间段是否用尽,因总时间相同,只判断一人即可
i++;
if(d[j][1]==0)
j++;
}
printf("%d",k);
return 0;
}
```
by Jianxin7180 @ 2022-01-21 23:30:51
原来是数据类型转换出了问题,没能在储存之前转换为long,所以就丢失精度了
by Jianxin7180 @ 2022-01-26 12:14:35