刚刚的F...超时了
  • 板块学术版
  • 楼主EDqwq
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/2/17 00:38
  • 上次更新2023/11/5 03:10:59
查看原帖
刚刚的F...超时了
294562
EDqwq楼主2021/2/17 00:38
/*
  Author: EnderDeer
  Online Judge: Luogu
*/

#include<bits/stdc++.h>

#define int long long
#define mem(x) memset(x,0,sizeof(x))

using namespace std;

int read(){
   int s = 0,w = 1;
   char ch = getchar();
   while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
   while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
   return s * w;
}

int t;
int n;
int a[1000010];
int b[1000010];
int c[1000010];
int q,p;
int s;

signed main(){
	cin>>t;
	while(t --){
		mem(a);
		mem(b);
		mem(c); 
		q = 0;
		p = 1;
		s = 0;
		n = read();
		for(int i = 1;i <= n;i ++)a[i] = read();
		sort(a + 1,a + n + 1);
		for(int i = 2;i <= n;i ++){
			if(a[i] != a[i - 1]){
				q ++;
				b[q] = p;
				p = 1;
			}
			else p ++;
		}
		q ++;
		b[q] = p;
		sort(b + 1,b + q + 1);
		n = q;
		int ans = 2147483647;
		for(int i = 1;i <= n;i ++)c[i] = c[i - 1] + b[i];
		for(int i = 0;i <= n;i ++){
			s = 0;
			s += c[n];
			if(i + 1 <= n){
				s -= b[i + 1] * (n - (i + 1) + 1);
			}
			ans = min(ans,s);
		}
		printf("%lld\n",ans);
	}
	return 0;
}
2021/2/17 00:38
加载中...