为甚么一个if语句改完就A了?
查看原帖
为甚么一个if语句改完就A了?
213196
Wens楼主2020/11/2 08:14
#include<bits/stdc++.h>
#define N 1010
using namespace std;

int n,head,tail,ans1[N],ans2;
struct node{
	int a,b,m,num;
}obj[N];

int Max(int a,int b){return a>b?a:b;}
int Min(int a,int b){return a<b?a:b;}

bool cmp1(node x,node y){
	return x.m<y.m;
}
bool cmp2(node x,node y){
	return x.num<y.num;
}

int main(){
	cin>>n;
	tail=n+1;
	for(int i=1;i<=n;++i){
		cin>>obj[i].a;
		obj[i].num=i;
	}
	for(int i=1;i<=n;++i){
		cin>>obj[i].b;
		obj[i].m=Min(obj[i].a,obj[i].b);
	}
	sort(obj+1,obj+1+n,cmp1);
	for(int i=1;i<=n;++i){
		if(obj[i].m==obj[i].a)ans1[++head]=obj[i].num;
		else ans1[--tail]=obj[i].num;//原来else写的是if(obj[i].m==obj[i].b)
	}
	sort(obj+1,obj+1+n,cmp2);
	int A=0,t=0;
	for(int i=1;i<=n;++i){
		A+=obj[ans1[i]].a;
		t=Max(t,A)+obj[ans1[i]].b;
//		cout<<A<<" "<<t<<endl;
	}
	cout<<t<<endl;
	for(int i=1;i<=n;++i)cout<<ans1[i]<<" ";
	cout<<endl;
	return 0;
}
2020/11/2 08:14
加载中...