【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 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的 ...
随机推荐
- 你的第一个接口测试:Python 接口测试
前言: 首先我们先明确一个概念,什么叫接口.什么叫接口测试? 接口的全称叫[Application Programming Interface 又叫API],是提供应用程序与开发人员基于某软件或硬件得 ...
- sublime3配置java开发环境
链接:http://www.jianshu.com/p/48a524a4f63c 或者:http://www.jianshu.com/p/9d167c4c4feb 侵权删!
- Redis 哨兵 Sentinel
Redis Sentinel:redis集群应用,分布式系统. 多个Sentinal进程之间通过 gossip 协议来接收主服务器是否下线的信息,通过 Raft 一致性协议来决定故障转移及转移服务 ...
- 时序数据库InfluxDB
在系统服务部署过后,线上运行服务的稳定性是系统好坏的重要体现,监控系统状态至关重要,经过调研了解,时序数据库influxDB在此方面表现优异. influxDB介绍 时间序列数据是以时间字段为每行数据 ...
- C# 如何使用 RabbitMQ 实现消息收发
本文是基于http://www.cnblogs.com/cheng-lei/articles/7274513.html的项目结构进行搭建的,了解之前请先阅读http://www.cnblogs.com ...
- ubuntu10.10安装使用vnc
原文发表于:2010-12-15转载至cu于:2012-07-21 搭安全试验的环境,在vmware上安装了ubuntu10.10(大学的时候用过,最早用的好像是6系列吧).安装好后想用远程桌面控制, ...
- Python最简编码规范
前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...
- [T-ARA][Lovey-Dovey]
歌词来源:http://music.163.com/#/song?id=22704426 作曲 : 新沙洞老虎/崔圭成 [作曲 : 新沙洞老虎/崔圭成] [作曲 : 新沙洞老虎/崔圭成] 作词 : 新 ...
- 如何让QT程序以管理员权限运行(UAC)
方案一:(仅适用于使用msvc编译器) 在PRO文件中添加一行指令即可, QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' ...
- 遇到Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so问题的解决方法
运行一个基于tensorflow的模型时,遇到Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so问题. 解决方法:打开 ...