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 ...
随机推荐
- codeforces 632E. Thief in a Shop fft
题目链接 E. Thief in a Shop time limit per test 5 seconds memory limit per test 512 megabytes input stan ...
- Delphi获取与设置系统时间格式,即GetLocaleInfo和SetLocaleInfo
在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字 ...
- 有道翻译API
轻奢侈品_百度百科 轻奢侈品 有道翻译API 有道翻译API申请成功 API key:72763558 keyfrom:lexus-studio
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- cocos2d-x 3.1 集成 云风pbc
cocos2d-x 3.x版本号变动比較大,从改用cmake管理整个项目,到使用python集成一体化的项目工具. 这些都是我喜欢的.我能够非常easy的在我的ubuntu上面搭建好开发环境,并且根本 ...
- curl向web服务器发送json数据
c++使用libcurl: /* *g++ demo.cpp -g -Wall -lcurl */ #include <string.h> #include <stdlib.h> ...
- system.io.file创建
在实际开发中,如果用的文件名不能确定位置.或名字.可以使用GUID类来命名函数.Guid 结构标识全局唯一标示符.其NewGuid结构可以初始化一个新历.该方法语法格式如下: public stati ...
- Css Rest 方法
在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是 重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的 ...
- 下载文件 ,调用系统的方法(UIDocumentInteractionController) 查看
- 关于tableView刷新
UITabelView的局部刷新 1. 刷新整个tableView用[self.tableView reloadData]; 2. [self.tableView reloadRowsAtIndexP ...