51NOD 1182 完美字符串

 

题目来源: Facebook Hacker Cup选拔
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题

 

约翰认为字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。
约翰不在乎字母大小写。(也就是说字母F和f)的完美度相同。给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77。

 

Input
输入一个字符串S(S的长度 <= 10000),S中没有除字母外的其他字符。
Output
由你将1-26分配给不同的字母,使得字符串S的完美度最大,输出这个完美度。
Input示例
dad
Output示例
77

题解:基本的字符处理题,统计每个字符出现的次数,排序之后乘1-26即可。

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[30];
 7 char s[10007];
 8 int main()
 9 {
10     cin>>s;
11     int n = strlen(s);
12     memset(a,0,sizeof(a));
13     for(int i=0;i<n;i++)
14     {
15         int x;
16         if(s[i]>='a')x=s[i]-'a';
17         else if(s[i]>='A')x=s[i]-'A';
18         a[x]++;
19     }
20     sort(a,a+26);
21     long long ans = 0;
22     for(int i=25;i>=0;i--)
23     {
24         ans+=a[i]*(i+1);
25     }
26     cout<<ans<<endl;
27     return 0;
28 }

 

posted @ 2017-12-02 02:50  sortmin  阅读(219)  评论(0编辑  收藏  举报