ZCMU-1484-签到题

来源:互联网 发布:大数据龙头公司 2017 编辑:程序博客网 时间:2024/05/02 01:24

1484: 签到题

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 292  Solved: 66
[Submit][Status][Web Board]

Description

LuxakyLuee是一个非常爱玩的人。
有一天一个叫Kevin·Feng的人向LuxakyLuee发来游戏邀请。
Kevin·Feng摆了一地的键盘冒,上面都是英文字母,让LuxakyLuee从其中任选k个。
选完之后进入清算时间,每一个键帽的分数是总共选取的的该种键帽字母的数量。
如果LuxakyLuee足够机智他能得多少分呢。

Input

多组测试数据。
每组数据有两行。
第一行为n和k,n为键盘冒的数量,k为选取的键盘冒的个数。(1 ≤ k ≤ n ≤ 100000).
第二行为地上的键盘冒(均为大写字母)。

Output

每组数据输出一行,为LuxakyLuee的最高可能得分。

Sample Input

15 10
DZFDFZDFDDDDDDF
6 4
YJSNPI

Sample Output

82
4

HINT

温馨提示:输入时用%s输入字符串,输出时用%lld, OJ 不支持 %I64d  !!!

【解析】

这道题我们就让字母数量越多的那个字母先拿我们可以先统计字母的数量,之后我们再进行排序,然后再进行筛选就好了

#include<iostream>#include<string.h>#include<string>#include<cstdio>#include<algorithm>#define MAXN 100010using namespace std;int main(){    long long n,k,i,sum;    char s[MAXN];    while(~scanf("%lld%lld",&n,&k))    {        getchar();        scanf("%s",s);        long long a[26]={0};        for(i=0;i<n;i++)        {            a[s[i]-65]=a[s[i]-65]+1;        }        sort(a,a+26);        n=25;        sum=0;        while(k!=0)        {            if(k>=a[n])            {                k=k-a[n];                sum=sum+a[n]*a[n];            }            else if(k<a[n])            {                sum+=k*k;                k=0;            }            n--;        }      printf("%lld\n",sum);    }    return 0;}

0 0
原创粉丝点击