CodeForces

是一道简单题 

将字母从个数多到小排序 然后 再按题目算法得到最多

但是注意 数据类型声明 money要为long long

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 
 8 int  num[32];
 9 long long money[32];//因为 虽然 n是到10^5但是有money和money相乘 的操作 再存储在同一位置 就超了 
10 int n, k;
11 
12 bool cmp(int a, int b)
13 {
14     return a > b;
15 }
16 int main()
17 {
18     double sum = 0;
19     freopen("in.txt", "r", stdin);
20     while (~scanf("%d%d", &n, &k))
21     {
22         getchar();
23         sum  = 0;
24         memset(num, 0, sizeof(num));
25         for (int i = 0; i < n; i++)
26         {
27             char temp;
28             scanf("%c", &temp);
29             num[temp-'A']++;
30         }
31         sort(num, num+26, cmp);
32         for (int i = 0; i < 26; i++)
33         {
34             money[i] = min(num[i], k);
35             k -= num[i];
36             if (k <= 0) break;
37         }
38         for (int i = 0; i < 26; i++)
39         {
40             sum+= money[i]*money[i];
41         }
42         printf("%.0lf
", sum);
43     }
44     return 0;
45 
46 }
原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6329687.html