哈夫曼编码 - 追风蹑影

zhaoyz 2021-08-05 原文


哈夫曼编码



 

1 HDU 2527 Safe Or Unsafe

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <vector>
 8 #include <stack>
 9 #include <map>
10 #include <set>
11 #include <cmath>
12 #include <cctype>
13 #include <ctime>
14 
15 using namespace std;
16 
17 #define REP(i, n) for (int i = 0; i < (n); ++i)
18 #define eps 1e-9
19 #define SZ(x) ((int)x.size())
20 #define PI acos(-1.0)
21 #define lc id << 1
22 #define rc id << 1 | 1
23 #define lson low, mid, lc
24 #define rson mid + 1, high, rc
25 
26 typedef long long ll;
27 typedef unsigned long long ull;
28 typedef pair<int, int> pii;
29 const int maxn = 1e3;
30 char str[maxn];
31 int T, n, len;
32 int cnt[maxn];
33 multiset<int> s;
34 
35 int huffman(char* str, int len, int k) { //k表示进制数
36     s.clear(); memset(cnt, 0, sizeof(cnt)); int ret = 0, t;
37     for (int i = 0; i < len; ++i) { ++cnt[str[i]]; }
38     for (int i = 0; i < 200; ++i) {
39         if (cnt[i]) { s.insert(cnt[i]); }
40     }
41     if ((int)s.size() == 1) { return *s.begin(); }
42     while ((int)s.size() > 1) {
43         t = 0;
44         for (int i = 0; i < k; ++i) {
45             t += *s.begin(); s.erase(s.begin());
46         }
47         s.insert(t); ret += t;
48     }
49     return ret;
50 }
51 
52 int main() {
53 #ifdef __AiR_H
54     freopen("in.txt", "r", stdin);
55 //    freopen("out.txt", "w", stdout);
56 #endif // __AiR_H
57     scanf("%d", &T);
58     while (T--) {
59         scanf("%d %s", &n, str);
60         len = strlen(str); int ans = huffman(str, len, 2);
61         if (ans > n) { printf("no\n"); }
62         else { printf("yes\n"); }
63     }
64     return 0;
65 }

View Code

 

 


 

发表于
2017-10-26 20:21 
追风蹑影 
阅读(123
评论(0
编辑 
收藏 
举报

 

版权声明:本文为zhaoyz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhaoyz/p/7739154.html

哈夫曼编码 - 追风蹑影的更多相关文章

  1. 【转】Hadoop安全模式详解及配置 – develooop

    【转】Hadoop安全模式详解及配置 原文链接 http://www.iteblog.com/archives […]...

  2. Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关 […]...

  3. 黑客入侵技术及命令基础讲解 – 加班费的离开

    View Post 黑客入侵技术及命令基础讲解    第一节课:命令的使用 必需懂得一些命令才干更好地运用!总 […]...

  4. 《浪潮之巅》读后感 – PHP淮北

    《浪潮之巅》读后感 2012-05-24 08:58  PHP淮北  阅读(4563)  评论(10)  编辑 […]...

  5. Stages — 研发过程可视化建模和管理平台

            Stages是德国 Methodpark公司的产品,用于帮助企业定义、管理、发布、控制、优化其 […]...

  6. MATLAB基础知识——1.3变量及操作 – Tea&Honey

    MATLAB基础知识——1.3变量及操作 1、变量名区分字母的大小写 2、标准函数名以及命令名必须是小写字母 […]...

  7. 12月TIOBE编程语言排行榜 – 『小小菜鸟』

    12月TIOBE编程语言排行榜  ActionScript 排名21 Position Dec 2008 Po […]...

  8. 网站搭建-云服务器ECS的使用 – Yuan-SW-F(abysw)

    网站搭建-云服务器ECS的使用 1. 查看购买的云服务器实例,重置密码 2. 查找IP进行查看,此时网页时不存 […]...

随机推荐

  1. 如何快速查找透明的icon,让你再也不缺icon的方法

        1.打开谷歌搜索引擎,图片搜索 2.设置搜索类型为透明  ...

  2. 如何用PPT制作一份可视化数据图表?

    文 | 利兄 源 | 利兄日志 数据可视化主要是指借助于图形化手段,清晰有效地传达与沟通信息。简单来说,就是将 […]...

  3. LINUX 怎么实现root和普通用户的切换及怎么更改root密码

    在linux系统中执行什么命令后可以使$变为#?     先说下$和#在linux系统终端(命令行)中通常代表 […]...

  4. Hive语法小释

    阅读本文你可以获取:  1.数据库的查询  2.hive表的基本操作(建表三种常用方式、删除表、修改表、加载数 […]...

  5. ping命令返回的TTL值判断操作系统

    通过简单的ping命令,查看返回的TTL值来判断对方的操作系统 生存时间(TTL)是IP分组中的一个值,网络中 […]...

  6. Android 解决打包为apk文件时已设置签名,在OPPO手机上安装时却出现“未设置签名”的错误

      解决办法:  ...

  7. 用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器

    http://itindex.NET/detail/48702-nginx-rtmp-http   一、流媒体 […]...

  8. Python 从入门到进阶之路(五)

    之前的文章我们简单介绍了一下 Python 的函数,本篇文章我们来看一下 Python 中的面向对象。  Py […]...

展开目录

目录导航