问题标题: 酷町堂:4255 游历列国

0
0
已解决
薛乘志
薛乘志
初级启示者
初级启示者

4255   游历列国经验值:1200

题目描述 Description

有一个僧侣想依次游历n个国家,现在已知从第i个国家到第i+1个国家之前,僧侣能募集到gi元钱,从第i个国家到第i+1个国家要花费ci元钱。现在可以从任意一个国家出发,试判断僧侣能否依次将n个国家环游一遍,如果不可以输出-1;可以的话输出可以开始的国家中编号最小的一个。

输入描述 Input Description

第一行,一个正整数,n
第二行,n个正整数,g1 g2 … gn
第三行,n个正整数,c1 c2 … cn

输出描述 Output Description

如果可以游历一遍的话,输出可以开始的国家中编号最小的一个,否则输出-1

样例输入 Sample Input

【样例输入1】 5 1 2 3 4 5 3 4 5 1 2 【样例输入2】 3 2 3 4 3 4 3

样例输出 Sample Output

【样例输出1】 4 【样例输出2】 -1

数据范围及提示 Data Size & Hint

n<=50

请思考如何在o(n)的时间内求出答案

错误的代码:60分

int a[101],b[101],n; 
bool can(int st){
	bool x[101]={};
	int sum=0;
	x[st]=1;
	sum+=a[st];
	sum-=b[st];
	if(sum<0){
		return false;
	}
	for(int j=0;j<n;j++){	
		int xh=-1,minn=1000;
		for(int i=0;i<n;i++){
			if(abs(b[i]-(sum+a[i]))<=minn&&x[i]==0&&(sum+a[i])>=b[i]){
				minn=abs(a[i]-(sum+a[i]));
				xh=i;
			}
		}
		if(xh==-1){
			continue;
		}
		sum+=a[xh];
		sum-=b[xh];
		x[xh]=1;
	}
	for(int i=0;i<n;i++){
		if(x[i]==0){
			return false;
		}
	}
	return true;
}
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<n;i++){
		cin>>b[i];
	}
	int minn=-1;
	for(int i=0;i<n;i++){
		if(can(i)){
			cout<<i+1<<" ";
			return 0;
		}
	}
	cout<<-1;
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

错误信息:

Wrong Answer:60分
1
Accepted
0ms
2
Accepted
0ms
3
Accepted
0ms
4
Accepted
0ms
5
Wrong Answer
0ms
6
Wrong Answer
0ms
7
Accepted
0ms
8
Wrong Answer
0ms
9
Accepted
0ms
10
Wrong Answer
0ms

求分析哪里错了

薛乘志在2022-11-12 13:12:55追加了内容

薛乘志在2022-11-12 13:13:43追加了内容
薛乘志在2022-11-12 13:18:01追加了内容


0
0
0
我要回答