【bzoj4198】【Noi2015】荷马史诗
4198: [Noi2015]荷马史诗
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 2200 Solved: 1169
[Submit][Status][Discuss]
Description
追逐影子的人,自己就是影子。 ——荷马
Input
输入文件的第 1 行包含 2 个正整数 n,k,中间用单个空格隔开,表示共有 n 种单词,需要使用 k 进制字符串进行替换。
Output
输出文件包括 2 行。
题解:
huffman树相关知识:
1.带权路径长度:$W_{PL} = \sum_{i=1}^{n} w_{i} l_{i}$ 其中$w_{i}$为每个叶子结点的权值,$l_{i}$为每个叶子结点到根的路径长度;
Huffman即WPL最小的二叉树;
2.Huffman树的构造(先看图):

每次选权值最小的两个点合并并加入一个权值为两个点权值和的新点;
直到只有一个点;(我太弱了所以还没有YY出证明,改天翻wiki吧)
满足WPL最小;
应用:huffman编码:
实际上huffman是为了解决:对字符串加密成二进制串,给出字符串中每个字符出现的次数,由于不能造成歧义所以必须要满足任何一个字符的二进制编码都不是另一个不同字符的二进制编码的前缀,使得整个加密后的二进制串长度最小;
完整的huffman就在上面建出来的树的边加上0 1 ,即变成一个字典树,每个点对应的二进制串即编码
例如权值为3的点的二进制串为:$(0001)_{2}$
回到原题
所以出题人就是想出个huffman树 , 只不过是k叉的;
最长字符串长度最短不是问题,优先队列实现的时候第二关键字为当前根最大深度即可;
k叉有点坑,需要补上(n - n%(k-1)) %(k-1)个权值为0的点;
#include<bits/stdc++.h>
#define ll long long
#define mk make_pair
#define fir first
#define sec second
using namespace std;
const int N=;
int n,k;
typedef pair<ll,ll> pii;
priority_queue<pii,vector<pii>,greater<pii> >q;
int main(){
// freopen("bzoj4198.in","r",stdin);
// freopen("bzoj4198.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
ll x;scanf("%lld",&x);
q.push(mk(x,));
}
int lim=(k--(n-)%(k-))%(k-);
for(int i=;i<=lim;i++)q.push(mk(,));
ll ansx=,ansy=;
while(!q.empty()){
ll x=,y=;
for(int i=;i<=k&&!q.empty();i++,q.pop()){
pii u=q.top();
x+=u.fir;
y=max(y,u.sec);
}
y++;
ansx+=x,ansy=max(ansy,y);
if(q.empty())break;
q.push(mk(x,y));
}
printf("%lld\n%lld\n",ansx,ansy);
return ;
}
bzoj4198
【bzoj4198】【Noi2015】荷马史诗的更多相关文章
- [UOJ#130][BZOJ4198][Noi2015]荷马史诗
[UOJ#130][BZOJ4198][Noi2015]荷马史诗 试题描述 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静 ...
- [BZOJ4198][Noi2015]荷马史诗
4198: [Noi2015]荷马史诗 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 700 Solved: 365[Submit][Status] ...
- [BZOJ4198] [Noi2015] 荷马史诗 (贪心)
Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是 ...
- BZOJ4198: [Noi2015]荷马史诗(哈夫曼树)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1824 Solved: 983[Submit][Status][Discuss] Descripti ...
- 【BZOJ4198】[Noi2015]荷马史诗 贪心+堆
[BZOJ4198][Noi2015]荷马史诗 Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅 ...
- BZOJ_4198_[Noi2015]荷马史诗_huffman实现
BZOJ_4198_[Noi2015]荷马史诗_huffman实现 题意: Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗> ...
- 洛谷 P2168 [NOI2015]荷马史诗 解题报告
P2168 [NOI2015]荷马史诗 题目描述 追逐影子的人,自己就是影子 --荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷 ...
- BZOJ4198 & 洛谷2168 & UOJ130:[NOI2015]荷马史诗——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4198 https://www.luogu.org/problemnew/show/P2168 ht ...
- bzoj 4198: [Noi2015]荷马史诗
Description 追逐影子的人,自己就是影子. --荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由& ...
- [Noi2015]荷马史诗
来自FallDream的博客,未经允许,请勿转载,谢谢. 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的 ...
随机推荐
- java.lang.Boolean.valueOf(String s)
简单说,就是s为true(这四个字母大小写任意)时,返回值为true,否则为false public class one { public static void main(String[] args ...
- jvm之GC知识点
GCRoots: 虚拟机栈(栈帧中的局部变量表)引用的对象 方法区中静态属性引用的对象 方法去中常量引用的对象 本地方法栈中JNI(NATIVE方法) ...
- 存储过程关于LOOP循环问题
本随笔文章,由个人博客(鸟不拉屎)转移至博客园 发布时间: 2018 年 10 月 17 日 原地址:https://niaobulashi.com/archives/procedures_loop. ...
- CentOS7.3部署镜像仓库Harbor
参考文档: harbor介绍:https://github.com/vmware/harbor harbor安装&使用指导:https://github.com/vmware/harbor/b ...
- 面向对象编程(OOP)思想小结
Concepts 类(class):对我们要解决问题的抽象,比如建造房子的蓝图:但实现机制上来讲,类是根据蓝图构建而成的,存储在内存中的,用来表示对象的数据. 对象(object):根据类构建的实体, ...
- linux 下 mysql安装和配置
最近在学习R语言,看到R与数据库交互这一部分,就自己动手实践了一下,数据库选择的是mysql,主要记录下linux下怎么安装mysql. 网上的很多资料都有相关的文章,这里只是记录下自己安装过程中遇到 ...
- Spark入门(Python)
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用 ...
- Scrum立会报告+燃尽图(十一月二十七日总第三十五次):β阶段最后完善
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2415 项目地址:https://git.coding.net/zhang ...
- 【状压dp】AC Challenge
https://nanti.jisuanke.com/t/30994 把每道题的前置条件用二进制压缩,然后dp枚举所有可能状态,再枚举该状态是从哪一个节点转移来的,符合前置条件则更新. 代码: #in ...
- 02_Java基础_第2天(变量、运算符)_讲义
今日内容介绍 1.变量 2.运算符 01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器, * 例如水杯是容器,用来装载水:你家里的大衣柜 ...