【BZOJ4198】[Noi2015]荷马史诗 贪心+堆
【BZOJ4198】[Noi2015]荷马史诗
Description
追逐影子的人,自己就是影子。 ——荷马
Input
输入文件的第 1 行包含 2 个正整数 n,k,中间用单个空格隔开,表示共有 n 种单词,需要使用 k 进制字符串进行替换。
Output
输出文件包括 2 行。
Sample Input
1
1
2
2
Sample Output
2
HINT
题解:好吧我这个蒟蒻不会哈夫曼树,不会哈夫曼编码,我只会合并果子~
一开始,我们认为原来有n堆数,每堆数都有权值,将他们扔到优先队列里,每次取出权值和最小的k堆,将他们合成一堆。再扔回到优先队列里去。但是此题还要求最长单词的长度最小,我们就给每堆数维护一个pair,代表它的(权值和)以及(最多的合并次数)。
由于每次取出k个,扔回去一个,最终剩1个,所以要满足n%(k-1)=1(当k不等于2时),所以如果n%(k-1)不等于1时我们要向堆里扔一些权值为0的数补齐。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <utility>
#define mp(A,B) make_pair(A,B)
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
priority_queue<pll> pq;
ll n,k;
pll x,y,ans;
int main()
{
scanf("%lld%lld",&n,&k);
ll i,a;
for(i=1;i<=n;i++) scanf("%lld",&a),pq.push(mp(-a,0));
while(k!=2&&n%(k-1)!=1) pq.push(mp(0,0)),n++;
while(pq.size()!=1)
{
x=y=mp(0,0);
for(i=1;i<=k;i++)
{
y=pq.top(),pq.pop();
x.first+=y.first,x.second=min(x.second,y.second-1);
}
ans.first-=x.first,ans.second=max(ans.second,-x.second),pq.push(x);
}
printf("%lld\n%lld",ans.first,ans.second);
return 0;
}
【BZOJ4198】[Noi2015]荷马史诗 贪心+堆的更多相关文章
- [BZOJ4198] [Noi2015] 荷马史诗 (贪心)
Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是 ...
- [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]荷马史诗(哈夫曼树)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1824 Solved: 983[Submit][Status][Discuss] Descripti ...
- 洛谷$P2168\ [NOI2015]$荷马史诗 贪心
正解:贪心 解题报告: 传送门$QwQ$ 昂这个就哈夫曼树板子题鸭$QwQ$,只是从二叉变成多叉了$QwQ$ 考虑用类似合并果子的方法?就从两个变成$k$个了嘛,一样的鸭,然后就做完了$QwQ$ 注意 ...
- 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 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由& ...
随机推荐
- Cryptography I 学习笔记 --- 分组密码
1. 伪随机置换(PRF,Rseudo Random Permutaion)3DES/AES,K*X -> X(a. 可以高效计算,b. PRF函数是一个一一映射的函数,c. 存在有效的逆向算法 ...
- shell的各种运行模式?
交互式shell和非交互式shell,login shell和non-login shell.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录.. 交互式模式就是shell等待你的 ...
- vue element-ui Tabs 标签页实现【更多】功能
element-ui Tabs本身是没有更多功能的,如果在外边添加一个更多按钮,又非常不好看, 而利用API中Tabs Attributes的before-leave勾子方法可以实现这个功能, 简单P ...
- Codeforces 898 B.Proper Nutrition
B. Proper Nutrition time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Codeforces 906D Power Tower(欧拉函数 + 欧拉公式)
题目链接 Power Tower 题意 给定一个序列,每次给定$l, r$ 求$w_{l}^{w_{l+1}^{w_{l+2}^{...^{w_{r}}}}}$ 对m取模的值 根据这个公式 每次 ...
- 分享Kali Linux 2017年第18周镜像文件
分享Kali Linux 2017年第18周镜像文件 Kali Linux官方于4月30日发布2017年的第18周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KD ...
- 深入理解 JavaScript Function
1.Function Arguments JavaScript 函数的参数 类型可以是 复杂类型如 Object or Array 和简单类型 String Integer null undefin ...
- kindeditor编辑器,获取textarea值
在获取textarea值的时候,从数据库读出来的值都能获取到,但是新输入的值就得不到,只要是新输入的都得不到值 答案: 我昨天刚用kindeditor,我是使用ajaxForm提交表单的在360浏览器 ...
- Hbase Basic
启动:start-hbase.sh 停止:stop-hbase.sh 进入shell:hbase shell 状态:status 创建表:create 'tableName', 'colFam1' 查 ...
- mapreduce_template
Hadoop Tutorial - YDN https://developer.yahoo.com/hadoop/tutorial/module4.html import java.io.IOExce ...