51Nod 1182 完美字符串 (贪心)

Posted 午夜的行人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51Nod 1182 完美字符串 (贪心)相关的知识,希望对你有一定的参考价值。

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

思路:先进行大小写转换并统计各字母出现次数,然后排序,最后按出现次数的顺序分配权值,出现次数越多,权值越大,累加即可。
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <vector>
 6 #include <cstdlib>
 7 #include <iomanip>
 8 #include <cmath>
 9 #include <ctime>
10 #include <map>
11 #include <set>
12 using namespace std;
13 #define lowbit(x) (x&(-x))
14 #define max(x,y) (x>y?x:y)
15 #define min(x,y) (x<y?x:y)
16 #define MAX 100000000000000000
17 #define MOD 1000000007
18 #define pi acos(-1.0)
19 #define ei exp(1)
20 #define PI 3.141592653589793238462
21 #define INF 0x3f3f3f3f3f
22 #define mem(a) (memset(a,0,sizeof(a)))
23 typedef long long ll;
24 const int N=10005;
25 const int mod=1e9+7;
26 bool cmp(char x,char y)
27 {
28     return x>y;
29 }
30 string S;
31 int letter[100] = {0};
32 int main()
33 {
34     while(cin>>S){
35         for(int i=0;i<S.length();i++){
36             if (S[i]>90) S[i] -= 32;
37             letter[S[i]]++;
38         }
39         sort(letter+65,letter+91);
40         int val = 26,ans = 0;
41         for (int i=90;i>=65;i--)
42             ans +=letter[i]*val--;
43         printf("%d\n", ans);
44     }
45     return 0;
46 }

 

 

以上是关于51Nod 1182 完美字符串 (贪心)的主要内容,如果未能解决你的问题,请参考以下文章

51Nod 1182 完美字符串

51nod 1182 完美字符串字符串排序+哈希

51nod贪心算法入门-----完美字符串

51nod 1255 贪心/构造

51nod1313 完美串

51nod 1091 线段的重叠(贪心)