中间超int啊,不难的贪心。CodeForces,DIV2的A题
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int max_size = 100000+10; int main() { int n, k; char str[max_size]; long long arry[26]; while(scanf("%d %d", &n, &k) == 2) { getchar(); memset(arry, 0, sizeof(arry)); scanf("%s", str); int len = strlen(str); int i; for(i = 0; i < len; ++i) { arry[str[i]-'A']++; } i = 25; sort(arry, arry+26); //printf("%d ", arry[25]); long long sum = 0; long long now = k; do{ if(now > arry[i]) { sum += arry[i] * arry[i]; now -= arry[i]; //printf("%d ", sum); i--; }else if(now <= arry[i]){ sum += now*now; ///这个比较坑,没考虑到超int break; } }while(now != 0); cout << sum << endl; } return 0; }