ASCII Codes Table


ASCII

Hex

Symbol

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
TAB
LF
VT
FF
CR
SO
SI

ASCII

Hex

Symbol

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US

ASCII

Hex

Symbol

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
(space)
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/

ASCII

Hex

Symbol

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?

ASCII

Hex

Symbol

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

ASCII

Hex

Symbol

80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_

ASCII

Hex

Symbol

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o

ASCII

Hex

Symbol

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~

哈夫曼编解码器 Description 在文件压缩与网络传输中,哈夫曼编码(Huffman Coding)是一种经典的无损压缩算法。 它通过构建哈夫曼树来为每个字符分配不同长度的二进制编码,使高频字符拥有更短的编码,从而显著降低存储或传输开销。 现在,你需要实现一个简化版的哈夫曼编码系统。 系统可以根据给定的字符频率表构建哈夫曼树,生成编码表,并支持对二进制文本进行解码。 Input 第一行:整数 N (1 ≤ N ≤ 128),表示参与编码的字符种类数。 接下来 N 行:每行包含一个字符 ch 和一个整数 freq,用空格分隔,表示该字符及其出现频率。 特殊说明:空格字符用字符串 "space" 表示。 说明:ch 必须是单一字符(或字符串 "space" 表示空格),且只包含可打印 ASCII 字符(或 space)。 第 N+2 行:一个整数 Q (1 ≤ Q ≤ 10),表示后续有多少个操作。 接下来 Q 行:每行一条操作,格式如下: TABLE —— 输出字符的哈夫曼编码表,按照字符 ASCII 升序排列(space 在表中仍以字样 space 输出); ENCODE—— 将按哈夫曼编码规则转为二进制字符串并输出; 仅包含在频率表中出现的字符;输入中的空格用实际空格 ' ' 表示; DECODE—— 对给定的二进制字符串(只包含 '0' 与 '1')执行解码,输出原文字符串(空格原样输出)。 Output 对于 TABLE 操作:每行输出一条 ch:code 若字符为 "space",输出 space:code 对于 ENCODE操作:输出对应的二进制编码串 对于 DECODE操作:输出解码后的原文字符串 Sample Input 1 6 a 5 b 9 c 12 d 13 e 16 f 45 3 TABLE ENCODE face DECODE 01100100111 Sample Output 1 a:1100 b:1101 c:100 d:101 e:111 f:0 01100100111 face Sample Input 2 4 space 40 A 10 B 20 C 30 3 TABLE ENCODE A B C DECODE 1000101011 Sample Output 2 space:0 A:100 B:101 C:11 1000101011 A B C Hint 说明 哈夫曼树构建规则 为保证哈夫曼树与编码唯一,构造过程中使用统一的优先级比较准则来选择并合并结点: 每个结点维护两个属性:freq(子树总频率)和 min_ascii(该结点叶子集合中 ASCII 码最小的字符的 ASCII 值。对 "space" 使用 ASCII 32)。对叶子结点,min_ascii 即该字符的 ASCII 值。 使用一个优先队列(或每步对结点集合排序)按以下元组升序比较结点:(freq, min_ascii)即:先比较 freq(频率小的优先),若频率相等,则 min_ascii 小的优先。 每一步从队列中取出两个最小的结点(若存在 tie,则上面规则决定顺序);先取出的结点作为左子树,后取出的作为右子树,合并成新结点,新结点的 freq = sum(freq),min_ascii = min(min_ascii_left, min_ascii_right),并将新结点放回优先队列。 特例:若 N == 1(只有单个字符),规定该字符的编码为 "0"(以便编码/解码不产生空串)。 编码规则 左子树边记为 '0',右子树边记为 '1'; 从根节点到叶节点路径即为该字符的哈夫曼编码。 输入输出细节 TABLE 输出按字符 ASCII 升序排列;在排序时把 space 看作 ASCII 32 的字符并在表中以 space:code 形式输出。 ENCODE 中的空格为真实空格字符 ' '; Language: C++ CPP 使用范围 禁止使用 • 现成容器与容器适配器:如果题目要求你实现单链表/双链表/队列/栈/集 合/映射/堆/优先队列/哈希表等,不得用对应 STL 容器或能直接替代其 功能的结构。例如 stack,queue,deque,list,set,map 等等。 • 禁止使用标准库提供的算法实现:例如要求实现排序时,禁止 std::sort / std::stable_sort / std::nth_element 等等 允许使用 • CPP 中的面向对象,模版以及基本的语法增强。 • std::string 与基本 I/O 允许;解析/打印与题目无关的辅助逻辑可以用这些库完成。 时间限制1000MS 内存限制256MB 将代码进行修改
10-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值