是这样的,以下是我的代码
#include <iostream>
using namespace std;
int choo(int a,int b);
int main(){
int n,m,sn=0,sm=0,ans=-1,time=0,turn=3,kn=0,km=0;
cin>>n>>m;
int a[n][2],b[n][2];
for(int i=0;i<n;i++){
cin>>a[i][0]>>a[i][1];
time+=a[i][1];
}
for(int i=0;i<m;i++) cin>>b[i][0]>>b[i][1];
//cout<<endl;
for(int i=0;i<time;i++){
if(a[kn][1]!=0){
sn+=a[kn][0];
a[kn][1]--;
}
else{
kn++;
sn+=a[kn][0];
a[kn][1]--;
};
if(b[km][1]!=0){
sm+=b[km][0];
b[km][1]--;
}
else{
km++;
sm+=b[km][0];
b[km][1]--;
}
if(turn!=choo(sn,sm)&&choo(sn,sm)!=2) {
turn=choo(sn,sm);
ans++;
}
//cout<<sn<<" "<<sm<<" "<<turn<<" "<<ans<<endl;
}
if(ans==-1) cout<<"0";
else cout<<ans;
return 0;
}
int choo(int a,int b){
if(a>b) return 1;
else if(a<b) return 0;
else return 2;
}
大致思路就是每一次都算出两人总路程,然后进行判断是否改变顺序,并改变ans值,最后输出ans.
但我提交的时候却发现 3 4 5测试点有误
当我去下载 3 测试点时,它的输入是这样的:
4 6
1 4
1 3
4 5
2 6
0 5
1 1
2 1
4 4
4 5
5 2
输出答案应为 1
我在本机上测试的也是 1
但是我用洛谷在线IDE却输出了 0
我把每一次的数据都拿来做了对比(第一列 a走的路程 二 b走的路程 三 当前的顺序 四 ans):
我的:
1 0 1 0
2 0 1 0
3 0 1 0
4 0 1 0
5 0 1 0
6 1 1 0
7 3 1 0
11 7 1 0
15 11 1 0
19 15 1 0
23 19 1 0
27 23 1 0
29 27 1 0
31 31 1 0
33 35 0 1
35 39 0 1
37 44 0 1
39 49 0 1
而洛谷的:
4 0 1 0
8 0 1 0
12 0 1 0
16 0 1 0
20 0 1 0
25 1 1 0
30 3 1 0
34 7 1 0
38 11 1 0
42 15 1 0
46 19 1 0
50 23 1 0
52 27 1 0
54 31 1 0
56 35 1 0
58 39 1 0
60 43 1 0
62 47 1 0
而我自己模拟代码计算时,发现应该是第一种情况,那么究竟为什么会这样啊?