题目
公司:爱奇艺
类型:优先队列
题意:统计字符出现的频率,然后删掉k个字符使乘积最小,因此要删掉频次最高的字符。使用优先队列来统计频次最高的,每次减一。
#include <bits/stdc++.h>
using namespace std;
const int N = 27;
int a[N];
int main(){
int n;
string s;
int k;
cin>>s>>k;
memset(a, 0, sizeof a);
for(auto c: s) a[c-'a']++;
priority_queue<int> pq;
for(int i = 0; i < 26; i++){
if(a[i]) pq.push(a[i]);
}
while(k){
int t = pq.top();
pq.pop();
t--;
k--;
if(t) pq.push(t);
}
int res = 0;
while(pq.size()){
res += pq.top()*pq.top();
pq.pop();
}
printf("%d", res);
return 0;
}