51NOD OJ 完美字符串
2016-03-09 23:32
357 查看
输入
输出
输入示例
输出示例
分析: 由排序不等式,出现次数最多的字母显然应该给26。所以这个题目变成了统计每种字母出现的次数了,然后按照出现次数从大到小,依次分配从高到低的权值。这就是最朴素的贪心思想。
输入一个字符串S(S的长度 <= 10000),S中没有除字母外的其他字符。
输出
由你将1-26分配给不同的字母,使得字符串S的完美度最大,输出这个完美度。
输入示例
dad
输出示例
77
分析: 由排序不等式,出现次数最多的字母显然应该给26。所以这个题目变成了统计每种字母出现的次数了,然后按照出现次数从大到小,依次分配从高到低的权值。这就是最朴素的贪心思想。
#include <stdio.h> #include <string.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define MAX_STRING_LEN 10000 #define MAX_NUM 26 int g_num[MAX_NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; int comp(const void*a,const void*b) { return *(int*)a-*(int*)b; } int not_a_char(char c) { if ((c >='a' && c <='z') || (c >= 'A' && c <= 'Z')) { return FALSE; } else { return TRUE; } } /*是否是大写字母*/ int is_a_uppercase(char c) { if (c >= 'A' && c <= 'Z') { return TRUE; } else { return FALSE; } } /*是否是小写字母*/ int is_a_lowercase(char c) { if (c >= 'a' && c <= 'z') { return TRUE; } else { return FALSE; } } int char_to_num (char c) { if (not_a_char(c)) { printf("ERROR,NOT A CHAR!\n"); return -1; } if (is_a_uppercase(c)) { return c - 'A'; } if (is_a_lowercase(c)) { return c - 'a'; } } int main(void) { char *s1 = (char *)malloc(MAX_STRING_LEN * sizeof(char)); if (NULL == s1) { printf("alloc memory for s1 failed\n"); return -1; } if(NULL == gets(s1)) { printf("get s1 failed.\n"); return -1; } int len = strlen(s1); int i=0; int count[MAX_NUM]={0}; int result = 0; for (; i<len; i++) { count[char_to_num(s1[i])]++; } qsort(count, MAX_NUM, sizeof(int), comp); for (i=0; i<MAX_NUM; i++) { result += (count[i] * g_num[i]); } printf("%d\n", result); free(s1); return 0; }
相关文章推荐
- 一些OJ网站
- 【OJ日志】超级约瑟夫
- 【OJ日志】爬楼梯
- 【OJ日志】删除升序数组的重复数字
- 几个比较大的在线提交系统(Online Judge)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- LeetCode-Rotate Array
- LeetCode-Sudoku Solver
- LeetCode-Minimum Window Substring
- HDU 1000
- HDU 1001
- sjtu online judge 1034 二哥的金链
- hdu 1005 -- Number Sequence
- LeetCode OJ: Binary Tree Postorder Traversal
- LeetCode: Binary Tree Level Order Traversal II
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- UVA 424和10106的个人体会
- POJ 3629
- UVa 133
- UVA 673