我是个大可爱,只得了30分,有大佬能帮我优化一下吗
查看原帖
我是个大可爱,只得了30分,有大佬能帮我优化一下吗
1375011
huangtianle666楼主2025/8/2 15:27
#include<bits/stdc++.h>
using namespace std;
int n,len,sum,mi1,mi2,mx1,mx2,t,mx,mi=1e9; 
int a[1000005];
map<int,int>mp;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		bool f=false;
		for(auto j:mp){ 
			if(j.first==a[i]){
				f=true;
			}
		}
		mp[a[i]]++;
		if(!f){
			len++;
		}
	}
	while(len>=3){
		if(t==0){
			mi1=mi2=1e9;
			for(auto i:mp){
				if(i.second>0){
					mi1=min(mi1,i.first);
				}
			}
			for(auto i:mp){
				if(i.second>0&&i.first!=mi1){
					mi2=min(mi2,i.first);
				}
			}
			mp[mi1]--;
			mp[mi2]++;
			if(mp[mi1]==0){
				len--;
			}
		}
		else{
			mx1=mx2=0;
			for(auto i:mp){
				if(i.second>0){
					mx1=max(mx1,i.first);
				}
			}
			for(auto i:mp){
				if(i.second>0&&i.first!=mx1){
					mx2=max(mx2,i.first);
				}
			}
			mp[mx1]--;
			mp[mx2]++;
			if(mp[mx1]==0){
				len--;
			}
		}
		sum++;
		t=(t+1)%2;
	}
	for(auto i:mp){
		if(i.second>0)mx=max(mx,i.first),mi=min(mi,i.first);
	}
	printf("%d %d %d",sum,mi,mx);
	return 0;
}
2025/8/2 15:27
加载中...