首页 > 代码库 > CodeForces 462B Appleman and Card Game(贪心)
CodeForces 462B Appleman and Card Game(贪心)
题目链接:http://codeforces.com/problemset/problem/462/B
Appleman has n cards. Each card has an uppercase letter written on it. Toastman must choose k cards from Appleman‘s cards. Then Appleman should give Toastman some coins depending on the chosen cards. Formally, for each Toastman‘s card i you should calculate how much Toastman‘s cards have the letter equal to letter on ith, then sum up all these quantities, such a number of coins Appleman should give to Toastman.
Given the description of Appleman‘s cards. What is the maximum number of coins Toastman can get?
The first line contains two integers n and k (1?≤?k?≤?n?≤?105). The next line contains n uppercase letters without spaces — the i-th letter describes the i-th card of the Appleman.
Print a single integer – the answer to the problem.
15 10 DZFDFZDFDDDDDDF
82
6 4 YJSNPI
4
In the first test example Toastman can choose nine cards with letter D and one additional card with any letter. For each card with D he will get 9 coins and for the additional card he will get 1 coin.
题意:
共有N张牌,从中选出K张,得分为每次选出牌的面值与选该牌的数量。求最大得分。
PS:
贪心。从牌数多的面值开始选。
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef __int64 LL; int main() { LL n, k; LL a[47]; char s[100017]; while(~scanf("%I64d%I64d",&n,&k)) { memset(a,0,sizeof(a)); scanf("%s",s); for(int i = 0; i < n; i++) { a[s[i]-'A']++; } sort(a,a+26); LL ans = 0; for(int i = 25; i >= 0; i--) { if(k >= a[i]) { ans+=a[i]*a[i]; k -= a[i]; if(k == 0) break; } else { ans+=k*k; break; } } printf("%I64d\n",ans); } return 0; }
CodeForces 462B Appleman and Card Game(贪心)