Appleman and Card Game
CodeForces - 462BAppleman has n cards. Each card has an uppercase letter written on it. Toastman must choose k cards from Appleman's cards. Then Appleman should give Toastman some coins depending on the chosen cards. Formally, for each Toastman's card i you should calculate how much Toastman's cards have the letter equal to letter on ith, then sum up all these quantities, such a number of coins Appleman should give to Toastman.
Given the description of Appleman's cards. What is the maximum number of coins Toastman can get?
The first line contains two integers n and k (1 ≤ k ≤ n ≤ 105). The next line contains n uppercase letters without spaces — the i-th letter describes the i-th card of the Appleman.
Print a single integer – the answer to the problem.
15 10 DZFDFZDFDDDDDDF
82
6 4 YJSNPI
4
In the first test example Toastman can choose nine cards with letter D and one additional card with any letter. For each card with D he will get 9 coins and for the additional card he will get 1 coin.
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long n,k;
char s[100010];
long long num[100];
bool cmp(long long a,long long b){
return a > b;
}
int main(){
scanf("%lld%lld",&n,&k);
scanf("%s",s);
int i;
memset(num,0,sizeof(num));
for(i = 0; i < n; i++){
num[s[i]-'A']++;
}
sort(num,num+26,cmp);
long long ans = 0;
for(i = 0; i < 26; i++){
if(num[i]<=k){
ans = ans+(num[i]*num[i]);
k -= num[i];
}
else{
ans = ans + k*k;
k =0;
}
if(!k)break;
}
printf("%lld\n",ans);
return 0;
}