Appleman 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.
排个序,在从大到小取数字就行了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[100002]; long long a[27],i,j,p,l,n,k;
int main()
{
scanf("%d%d",&n,&k);
scanf("%s",&s);
for (int i=0;i<n;i++) a[s[i]-65]++;
sort(a,a+26);
i=26; p=0;
while (p<=k && i>=0)
{
p+=a[i];
if (p>k) break;
i--;
}
long long ans=0;
if (p==k) for (int j=i+1;j<=25;j++) ans=a[j]*a[j]+ans;
if (p!=k)
{
p=p-a[i];
ans=(k-p)*(k-p)+ans;
for (j=i+1;j<=25;j++) ans=ans+a[j]*a[j];
}
cout <<ans<<endl;
return 0;
}