这代码还有救吗?
查看原帖
这代码还有救吗?
744820
Eternal_SZC楼主2025/7/23 14:59
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100005],sum[100005],t[100005];
template <typename T>
void in(T &n){
	char c=getchar();int f=1;
	while((c>'9'||c<'0')&&c!='-') c=getchar();
	if(c=='-') c=getchar(),f=-1;
	for(n=0;c>='0'&&c<='9';c=getchar())
		n=n*10+c-'0';
	n*=f;
}
int main(){
	freopen("duel.in","r",stdin);
	freopen("duel.out","w",stdout);
	ll n;
	in(n);
	for(int i=1;i<=n;i++){
		in(a[i]);
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++){
		t[a[i]]++;
	}
	int j=2;
	int id=0;
	for(int i=1;i<=n&&j<=n;){
		id++;
		j=i+1;
		while(a[i]==a[j]) j++;
		sum[id]=sum[id-1]+t[a[i]];
		i=j;
	}
	ll ans=0;
	j=0;
	for(int i=1;i<=id&&j<=id;i++){
		bool f=0;
		j=i+1;
		while(j<=id&&sum[j]-sum[i]<sum[i]) {
			j++,f=1;
		}
		if(f&&j>id) j--;
		if(sum[j]-sum[i]<sum[i]){
			ans+=sum[j]-sum[i];
			break;
		}else{
			ans+=sum[i];
			for(int k=i+1;k<=id;k++){
				sum[k]-=sum[i];
			}
			sum[i]=0;
		}
//		cout<<ans<<endl;
	}
	printf("%lld",n-ans);
	return 0;
}
2025/7/23 14:59
加载中...