#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 100000+5
#define LL long long
using namespace std;
char a[MAXN];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int alpha[26];
memset(alpha,0,sizeof(alpha));
int n,k;
LL sum,num;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];alpha[a[i]-'A']++;
}
sort(alpha,alpha+26,cmp);
num=0,sum=0;
if(alpha[0]>k){sum=k*k;num=alpha[0];};
for(int i=0;num<k;i++)
{
num+=alpha[i];
if(num>k) sum+=(LL)(alpha[i]-num+k)*(LL)(alpha[i]-num+k);
else {sum+=alpha[i]*alpha[i];}
}
cout<<sum<<endl;
return 0;
}
本文详细介绍了使用C++编程语言解决字符数组排序与求和的问题,通过实现字符频率统计、排序算法应用及求和计算,展示了算法在实际编程中的应用与优化策略。
814

被折叠的 条评论
为什么被折叠?



