给你n张卡片,卡片上仅包含大写英文字母,现你可从这n张卡片中选出k张,要求得到尽可能高的分数。
关于分数的计算方式,在你所选择的k张卡片中,含有相同字母的卡片分数为卡片数乘以相同卡片个数。
就样例而言,选择九张D和其他任意一张,得到的结果为9*9+1 。
输入包含两行,第一行含两个整数n,k(0<k<=n<=1,000,000)
第二行为每张卡片上的字母
输出仅包含一行,输出尽可能高的分数
15 10 DZFDFZDFDDDDDDF
82
import sys if __name__=="__main__": lines = sys.stdin.readlines() while lines: [n, k] = list(map(int, lines.pop(0).strip().split())) nums = lines.pop(0).strip() from collections import Counter a = dict(Counter(nums)) A = sorted(dict(Counter(nums)).values()) if k <= A[-1]: print(k*k) else: A = A[::-1] res = 0 while k > A[0]: res += A[0]*A[0] k -= A[0] A.pop(0) res += k*k print(res)
while True: try: s1,s2 = list(map(int,input().strip().split())) str_count = input() a=[] from collections import Counter count = Counter(str_count) count_1=count.most_common()[:] for i in range(len(count_1)): a.append(count_1[i][1]) cal=[] for i in range(len(count_1)): s2 = s2-a[i] if s2<0: cal.append(s2+a[i]) break else: cal.append(a[i]) answer =0 for j in range(len(cal)): answer += cal[j]**2 print(answer) except: break