1490F
题意:给了一串数字,通过从删除任意几个元素是数组中每个元素的个数都相同;
题解:先统计出每个数字的个数,然后枚举保留个数,取得最优解
#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include <set>
using namespace std;
const int N = 200010;
#define x first
#define y second
int a[N];
int main() {
int t;
cin >> t;
while (t--) {
map<int, int> mp;
set<int>s;
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i], mp[a[i]]++;
if (mp.size() == n) cout << 0 << endl;///每个数字都只出现1次;
else {
for(auto i:mp) s.insert(i.y); //把所有出现的个数存到set里,可以减少枚举次数;
int ans=0x3f3f3f3f;
for(auto t:s){
int k=t;
int sum=0;
for(auto i:mp){
if(i.y==k) continue;
else {
if(i.y<k) sum+=i.y;
else sum+=(i.y-k);//只能删除;
}
}
ans=min(ans,sum);
}
cout<<ans<<endl;
}
}
//
//4 2 4 3 2 2 3 3/
//8
//3 1 2 3 3 4 3 3
//7
//2 3 1 4 1 1 2
//
return 0;
}