SSL P1408【树】哈夫曼树(二)
来源:互联网 发布:sql降序查询 编辑:程序博客网 时间:2024/06/06 20:18
Description
有n(n<=26)个带权结点,从a开始的n个字母分别表示这n个结点,他们分别代n个权值,试以它们为叶子结点构造一棵哈夫曼树(请按照左子树根节点的权小于等于右子树根节点的权的次序构造,若两结点相等时,按照字典顺序分别为左子树和右子树)。 最后求出该哈夫曼树的带权路径长度.
Input
第一行为一个n的值;第二行为n个字母,中间用空格分开;第三行为n个数字,分别表示着n个字母代表的数值.
Output
共计n+1行,前n行分别为按照字母表的顺序输出各个字母和编码,中间用冒号分开,第n+1行为该哈夫曼树的带权路径长度
Sample Input
Sample Output
7
a b c d e f g
3 7 8 2 5 8 4
Hint
a:1101
b:111
c:00
d:1100
e:101
f:01
g:100
100
哈夫曼树:
1.建立一棵哈弗曼树。
2.访问。
3.注意用字典序判断前后顺序。
4.没有根节点之后记录编码,并累加权值总和。
type arr=record data:longint; l,r:longint; addr:longint; zm:char; ans:string; end;var f,a:array[0..101] of arr; i,j,t,n,sum,x:longint; s:string; p:char;procedure mp(k:longint);var i,j:longint; t:arr;begin for i:=1 to k-1 do for j:=i+1 to k do if (a[i].data>a[j].data) or ((a[i].data=a[j].data) and (a[i].zm>=a[j].zm)) then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;end;procedure vist(o:string;t:longint);begin if f[t].data=0 then exit; vist(o+'0',f[t].l); vist(o+'1',f[t].r); if f[t].l=0 then if f[t].r=0 then begin f[t].ans:=o; sum:=sum+length(o)*f[t].data; end;end;begin readln(n); readln(s); for i:=1 to n do begin a[i].zm:=s[i*2-1]; f[i].zm:=a[i].zm; end; for i:=1 to n do begin read(a[i].data); f[i].data:=a[i].data; a[i].addr:=i; end; t:=n+1; i:=n; while i>1 do begin mp(i); f[t].data:=a[1].data+a[2].data; f[t].l:=a[1].addr; f[t].r:=a[2].addr; a[1].zm:=chr(ord('z')+1); a[1].data:=f[t].data; a[1].addr:=t; a[2].data:=a[i].data; a[2].addr:=a[i].addr; a[2].zm:=a[i].zm; inc(t); dec(i); end; vist('',t-1); for p:='a' to 'z' do for i:=1 to 26 do if f[i].zm=p then writeln(p,':',f[i].ans); writeln(sum);end.
1 0
- SSL P1408【树】哈夫曼树(二)
- SSL(二)
- SSL P2645 线段树练习题二
- HTTPS与SSL(二)
- HTTPS与SSL(二)
- HTTPS与SSL(二)
- SSL ENGINE机制 二
- HTTPS与SSL(二)
- HTTPS与SSL(二)
- SSL P1407【树】哈夫曼树(一)
- SSL P1409【树】哈夫曼树(三)
- HTTPS与SSL(二)
- HTTPS与SSL详解(二)
- https 与ssl 详解(二)
- SSL协议的概述(二)
- 为高级 JSSE 开发人员定制 SSL(二)
- javamail设置SSL发送邮件(二)
- SSL协议的概述(二)
- 防止网页被外部调用
- php利用simple_html_dom类,获取页面内容,充当爬虫角色
- 跟iPhone手机图标类似的控件抖动
- 自定义圆形的ImageView
- Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
- SSL P1408【树】哈夫曼树(二)
- LINUX
- Oracle 的dataguard配置
- AJAX之XMLHttpRequest对象
- 测试boost::algorithm::replace_all 方法
- 趣味分析系列 | 文胸品牌知多少(一)
- 基础/Java基础/(3)面向对象的特征有哪些方面?
- hibernate和spring mongo对比
- Linux 使用wget 命令下载JDK的方法