#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a,int b)
{
return a>b; //从大到小排序
}

int a[30],m;
char s[1005];

int huffman()
{
int n,i,t;

memset(a,0,sizeof(a));
for(i=0;i<m;i++) //统计频率
if(s[i]=='_')
a[0]++;
else
a[s[i]-'A'+1]++;
sort(a,a+27,cmp); //频率从小到大排序
for(i=0;;i++)
if(!a[i])
break;
n=i;
t=0;
for(i=n-1;i>0;i--) //注意频率最低的编码为全1,即类似于111111...
{
a[i-1]=a[i]+a[i-1]; //构造huffman树的思想
t+=a[i-1];
sort(a,a+i,cmp);
}
if(n==1)
t=a[0];
return t;
}

int main()
{
int t;

while(gets(s)&& strcmp("END",s))
{
m=strlen(s);
t=huffman();
printf("%d %d %.1lf\n",8*m,t,8.0*m/t);
}
return 0;
}

hdu1053的更多相关文章

  1. HDU-1053:Advanced Fruits(LCS+路径保存)

    链接:HDU-1053:Advanced Fruits 题意:将两个字符串合成一个串,不改变原串的相对顺序,可将相同字母合成一个,求合成后最短的字符串. 题解:LCS有三种状态转移方式,将每个点的状态 ...

  2. *HDU1053 哈夫曼编码

    Entropy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

随机推荐

  1. windows 2008 server 英文版 支持中文显示

    1:打开Start menu(开始菜单)并单击Control Panel(控制面板)打开它 2:单击Clock, Language, and Region(时钟.语言和区域)下面的Change dis ...

  2. castle windsor学习----- Referencing types in XML 在xm文件中引用类型

    当从xml引用installer的语法如下 <install type="Acme.Crm.Infrastructure.ServicesInstaller, Acme.Crm.Inf ...

  3. 使用JobControl控制MapReduce任务

    代码结构 BeanWritable:往数据库读写使用的bean ControlJobTest:JobControl任务控制 DBInputFormatApp:将关系型数据库的数据导入HDFS,其中包含 ...

  4. java处理json数据

    如果要处理json数据首先要确定使用的json包是那个,常用的有json-lib-x.jar和jack-json-x.jar.我这里的实例代码为json-lib-2.4-jdk15.jar. 在jso ...

  5. HDU 4034 Graph:反向floyd

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题意: 有一个有向图,n个节点.给出两两节点之间的最短路长度,问你原图至少有多少条边. 如果无解 ...

  6. Oracle学习笔记_04_多表查询

    一.概念: 1.多表连接有以下几种分法: (1)内连接           vs          外连接 (左.右.满) (2)等值连接        vs         不等值连接 (3)非自连 ...

  7. hdu4699 Editor(双向链表或双栈对弹)

    本题就是两个要点: 1.数据结构的设计.显然可以使用双向链表来做,但是写双向链表的代码复杂度高.其实更好的方法是使用两个对弹的栈来做,而且没必要用STL的栈,就自己开两个数组简单搞一下就好了. 2.最 ...

  8. windows cmd 看服务cpu、内存

    开始菜单-运行-cmd-输入systeminfo-回车 不用命令从以下两个地方都可以看出CPU个数 使用命令看CPU 利用win+r键打开运行,输入cmd回车即会出现 查看cpu信息 通过上图可以看出 ...

  9. ACM学习历程—UESTC 1218 Pick The Sticks(动态规划)(2015CCPC D)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 题目大意就是求n根木棒能不能放进一个容器里,乍一看像01背包,但是容器的两端可以溢出容器,只要两端的木 ...

  10. 【LeetCode】066. Plus One

    题目: Given a non-negative integer represented as a non-empty array of digits, plus one to the integer ...