蒟蒻在线求助!!
  • 板块P1568 赛跑
  • 楼主Wind_Journey
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/9/28 23:20
  • 上次更新2023/11/4 05:24:33
查看原帖
蒟蒻在线求助!!
332488
Wind_Journey楼主2021/9/28 23:20

是这样的,以下是我的代码

#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

而我自己模拟代码计算时,发现应该是第一种情况,那么究竟为什么会这样啊?

在线求救!!

2021/9/28 23:20
加载中...