思路
如果这一种数的数量多于 n/10 就拿走里面较小的一些数,使他变成n/10个就行。
我们肯定是拿多的数去变成其他的数才是最优解,不可能拿其他的又变回多的数。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <unordered_set>
#include <numeric>
#include <iomanip>
#define _fio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pb(e) push_back(e)
#define all(x) (x).begin(), (x).end()
#define allr(x) (x).rbegin(), (x).rend()
#define endl '\n'
using namespace std;
using i64 = long long;
using PII = pair<int,int>;
const int INF = 0x3f3f3f3f;
int main()
{
int n,a,b,c;
i64 sum = 0;
cin >> n;c = n/10;
map<int,priority_queue<int,vector<int>,greater<> > > mp;
for(int i=0;i<n;++i)
{
cin >> a >> b ;
mp[a].push(b);
}
for(auto el : mp){
if(el.second.size() > c)
{
int k = el.second.size() - c;
while(k -- )
{
sum += el.second.top();
el.second.pop();
}
}
}
cout << sum << endl;
return 0;
}