这题已经挂在我的任务列表里很久了。。。
一直觉得很难红题果然不同凡响但敲了敲其实也还可以
主要就是存储两人已走距离,指针遍历跑步,立个flag记录谁跑得快
#include<iostream>
using namespace std;
int n,m;
struct node{
int ti;//时间
int di;//每秒的距离
}a[1007],b[1007];//两个人
int s1,s2;//两人已走距离
int h1=1,h2=1;//指针初始都为1
int flag;
int ans;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i].di>>a[i].ti;
for(int i=1;i<=m;i++)
cin>>b[i].di>>b[i].ti;
while(h1<=n&&h2<=m){
if(a[h1].ti==0)h1++;//到了下一个阶段
s1+=a[h1].di,a[h1].ti--;//跑了一秒,加上这一秒的距离
if(b[h2].ti==0)h2++;//同上
s2+=b[h2].di,b[h2].ti--;//同上
if(flag==0)s1>s2?flag=1:flag=2;
//flag为0是初始状态
//等同于if(s1>s2)flag=1;else flag=2;
else {
if(s1<s2&&flag==1)flag=2,ans++;
//原是SH领先,现在变成了KC
if(s1>s2&&flag==2)flag=1,ans++;
//原是KC领先,现在变成了SH
}
}
cout<<ans<<endl;//输出答案即可
return 0;
}