首页 技术 正文
技术 2022年11月23日
0 收藏 507 点赞 4,913 浏览 1162 个字

BZOJ_4198_[Noi2015]荷马史诗_huffman实现

题意:

Allison 最近迷上了文学。她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的《荷马史诗》。但是由《奥德赛》和《伊利亚特》组成的鸿篇巨制《荷马史诗》实在是太长了,Allison 想通过一种编码方式使得它变得短一些。一部《荷马史诗》中有 n 种不同的单词,从 1 到 n 进行编号。其中第 i 种单词出现的总次数为 wi。Allison 想要用 k 进制串 si 来替换第 i 种单词,使得其满足如下要求:对于任意的 1≤i,j≤n,i≠j,都有:si 不是 sj 的前缀。现在 Allison 想要知道,如何选择 si,才能使替换以后得到的新的《荷马史诗》长度最小。在确保总长度最小的情况下,Allison 还想知道最长的 si 的最短长度是多少?一个字符串被称为 k 进制字符串,当且仅当它的每个字符是 0 到 k−1 之间(包括 0 和 k−1)的整数。字符串 Str1 被称为字符串 Str2 的前缀,当且仅当:存在 1≤t≤m,使得 Str1=Str2[1..t]。其中,m 是字符串 Str2 的长度,Str2[1..t] 表示 Str2 的前 t 个字符组成的字符串。 分析:首先,当k=2时本题就是合并果子当k>2时,要构造k叉哈夫曼树,只需要每次合并k个就好但是每次减少k-1,最后剩一个,如果(n-1)%(k-1)!=0,最后会出现少于k个导致合并时不是最优解,我们可以在一开始补充次数为0的单词。把合并后的值和深度一起放到优先队列中。代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define LL long long
priority_queue <pair <LL,LL> > q;
LL n,k,a[100050],ans,dep[100050];
int main(){
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
if((n-1)%(k-1)!=0)n+=(k-1)-(n-1)%(k-1);
for(int i=1;i<=n;i++){
q.push(make_pair(-a[i],-1));
}
for(int i=(n-1)/(k-1);i;i--){
LL sum=0,h=0;
for(int j=1;j<=k;j++){
LL dep=q.top().second;
h=min(h,dep);
sum-=q.top().first;q.pop();
}
ans+=sum;
q.push(make_pair(-sum,h-1));
}
printf("%lld\n%lld",ans,-q.top().second-1);
}

BZOJ_4198_[Noi2015]荷马史诗_huffman实现

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,989
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,504
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,348
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,131
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,765
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,842