思路:贪心拿数量最多的卡片
注意结果会爆int
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <algorithm>
#define ll long long
#define max_ 100100
using namespace std;
ll n,k;
ll num[50];
int main(int argc, char const *argv[]) {
scanf("%lld%lld",&n,&k);
char c;
for(int i=1;i<=n;i++)
{
scanf(" %c",&c);
num[c-'A'+1]++;
}
sort(num+1,num+1+26);
int i=26;
ll ans=0;
while(num[i]!=0)
{
if(k<=num[i])
{
ans+=k*k;
break;
}
else
{
ans+=num[i]*num[i];
k-=num[i];
i--;
}
}
printf("%lld\n",ans );
return 0;
}