【bzoj4198】 Noi2015—荷马史诗
http://www.lydsy.com/JudgeOnline/problem.php?id=4198 (题目链接)
题意
一篇文章n个单词,每个出现了${w_i}$次,用k进制数代替单词,使得任意单词不是另一个单词的前缀。如何选择使文章的总长度最小,且在总长度最小情况下最长的k进制数的长度最小是多少
Solution
LCF不写博客→_→,我只好自己写了。。
将每个单词看成权值为${w_i}$的节点,很显然是个k叉哈弗曼树,考虑k=2的情况,就是一个“合并果子”。但是对于一般情况如果我们用用合并果子的做法会Wa,因为可能第一层的节点并没有满,那么如果把某一个叶子节点放到第一层一定会更优。所以我们加节点,其权值为0,直到${(k-1)|(n-1)}$,也就是说合并到最后一步一定正好剩下n个节点。
考虑第二问,我们在堆中添加第二关键字,就是当前最深节点的深度。于是问题就解决了。
细节
开LL,堆里面也要开→_→
代码
// bzoj4198
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 1<<30
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
int n,K; struct data {
LL w;int d;
friend bool operator < (const data a,const data b) {
return a.w==b.w ? a.d>b.d : a.w>b.w;
}
};
int main() {
scanf("%d%d",&n,&K);
priority_queue<data> q;
LL ans=0;
for (int i=1;i<=n;i++) {
LL x;scanf("%lld",&x);
q.push((data){x,0});
}
while ((n-1)%(K-1)) n++,q.push((data){0,0});
while (q.size()>1) {
LL w=0;int d=0;
for (int i=1;i<=K;i++) {w+=q.top().w,d=max(d,q.top().d);q.pop();}
ans+=w;
q.push((data){w,d+1});
}
printf("%lld\n%d",ans,q.top().d);
return 0;
}
【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 Timer定时器使用方法(二)
JAVA Timer 定时器测试 MyTask.java:package com.timer; import java.text.SimpleDateFormat;import java.util. ...
- POJ 3258 River Hopscotch(二分查找答案)
一个不错的二分,注释在代码里 #include <stdio.h> #include <cstring> #include <algorithm> #include ...
- 注册表检测office版本
#region 查询注册表,判断本机是否安装Office2003,2007和WPS public int ExistsRegedit() { int ifused = 0; RegistryKey r ...
- 转 如何使用JEE6快速开发简单的webservice
转自:http://www.iteye.com/topic/1135747,作者:红尘默岩 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作. 一.准备工作(以下为本实例使 ...
- CodeForces 76E Points
给出n个点,求任意两点间距离的平方和. 暴力显然超时,可以把公式写出来,化简一下,发现预处理一下后缀和就可以o(n)出解了. #include<cstdio> #include<cs ...
- [算法] trie树实现
小写字母的字典树 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 1 ...
- form2js的使用(续BootstrapTable)
通过收集表单数据,并且转换为json格式,实现表格的查询. 引入插件:不要忘记引入jquery. <script src="${ctx}/assets/plugins/form2js/ ...
- vs 2012svn 插件设置
- Android 4.0 ICS SystemUI浅析——StatusBar结构分析
Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsi ...
- Sping--life cycle
bean.xml: 注意, 千万不要后面加上 scope="prototype" <?xml version="1.0" encoding="U ...