HDU 2527
题目描述
分析
源码
//每次挑出现频率最小的两个元素,应该用优先级队列!!!!!!!!!! #include <stdio.h>
#include <limits.h>
#include <string.h>
int unionFre(int fre[26]); int main()
{
int frequency[26]; //记录每个字母出现的频率
int n;
int m;
char input[10000];
int letterNum; //出现的小写字母的个数
int len;
int result;
int i, j; scanf("%d", &n);
while (n --)
{
scanf("%d", &m);
scanf("%s", &input);
//初始化
memset(frequency, 0, sizeof(frequency)); //统计每个字母出现的次数
len = strlen(input);
for (i = 0; i < len; i ++)
{
frequency[input[i]-'a'] ++;
}
//没出现的字母频率均设为最大值
letterNum = 26;
for (i = 0; i < 26; i ++)
{
if (frequency[i] == 0)
{
letterNum --;
frequency[i] = INT_MAX;
}
} //如果字符串只由一个字母组成
if (letterNum == 1)
{
result = frequency[input[0]-97];
if (result <= m)
printf("yes\n");
else
printf("no\n"); continue;
} //循环(letterNum-1)次,每次挑选出现频率最低的两个元素进行合并
//并更新result值,加上被合并的两个元素的频率和
result = 0;
for (i = 0; i < letterNum-1; i ++)
{
result = result + unionFre(frequency);
} if (result <= m)
printf("yes\n");
else
printf("no\n");
} return 0;
} //合并函数
int unionFre(int fre[26])
{
int min, secondMin;
int minIndex, secondMinIndex;
int temp;
int i; min = fre[0];
minIndex = 0;
secondMin = fre[1];
secondMinIndex = 1; if (min > secondMin)
{
temp = min;
min = secondMin;
secondMin = temp; temp = minIndex;
minIndex = secondMinIndex;
secondMinIndex = temp;
} //找出频率最低的两个元素
for (i = 2; i < 26; i ++)
{
if (fre[i] < min)
{
secondMin = min;
secondMinIndex = minIndex; min = fre[i];
minIndex = i;
}
else if (fre[i] < secondMin)
{
secondMin = fre[i];
secondMinIndex = i;
}
} //合并两个元素
fre[minIndex] = min + secondMin;
fre[secondMinIndex] = INT_MAX; return (min + secondMin);
}
HDU 2527的更多相关文章
- HDU 1053 & HDU 2527 哈夫曼编码
http://acm.hdu.edu.cn/showproblem.php?pid=1053 #include <iostream> #include <cstdio> #in ...
- hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2527 Safe Or Unsafe (哈夫曼树)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2527哈夫曼树(二叉树的运用)
#include<stdio.h> #include<string.h> #define N 100 #define INF 2000000000 int b[N]; c ...
- hdu 2527 Safe Or Unsafe (优先队列实现Huffman)
Safe Or UnsafeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)
HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...
- HDU——PKU题目分类
HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...
- [转] HDU 题目分类
转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...
- HDU ACM 题目分类
模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...
随机推荐
- 利用Console来调试JS程序、Console用法总结
http://blog.163.com/zhangmihuo_2007/blog/static/27011075201452522824347/ http://blog.163.com/zhangmi ...
- Mysql笔记之 -- 开启Mysql慢查询
Mysql慢查询日志_1--如何开启慢查询日志 Windows下开启MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上 log-slow-qu ...
- poj 1949 Chores 最长路
题目链接 求出最长路..... #include <iostream> #include <vector> #include <cstdio> #include & ...
- WPF中如何获取ControlTemplate中的对象
原文 http://www.silverlightchina.net/html/study/WPF/2010/1116/3418.html 先看一段XAML代码: 1 2 3 4 5 6 7 8 9 ...
- Html 小插件9 腾讯新闻
地址:http://minisite.qq.com/others08/ 效果:
- 51nod 1239 欧拉函数之和(杜教筛)
[题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 [题目大意] 计算欧拉函数的前缀和 [题解] 我们 ...
- poj 2406 Power Strings(KMP变形)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 28102 Accepted: 11755 D ...
- opengl模板缓冲区
相信大家有些人对opengl的模板缓冲区不是很理解,包括我最开始也是,opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制.这里的过滤技术也就是我们的一个控制方法,主 ...
- HDU1506 ( Largest Rectangle in a Histogram ) [dp]
近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数 ...
- telnet登陆路由器。。。
登陆路由有两种方式.一种是console,还有一种是使用telnet,由于我电脑是win7,不支持console.也懒得装软件,就使用telnent为例. 一.开启telnetclient 对于XP. ...