【Huffman树】【贪心】【NOI 2015】【bzoj 4198】荷马史诗

【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 【华为OD机试真题 新系统】1009、企业内部门的最大层级 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战 阅读详情

4198: [Noi2015]荷马史诗

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 127  Solved: 80

Description

追逐影子的人,自己就是影子。 ——荷马

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 个字符组成的字符串。

Input

输入文件的第 1 行包含 2 个正整数 n,k,中间用单个空格隔开,表示共有 n 种单词,需要使用 k 进制字符串进行替换。

接下来 n 行,第 i+1 行包含 1 个非负整数 wi,表示第 i 种单词的出现次数。

Output

输出文件包括 2 行。

第 1 行输出 1 个整数,为《荷马史诗》经过重新编码以后的最短长度。
第 2 行输出 1 个整数,为保证最短总长度的情况下,最长字符串 si 的最短长度。

Sample Input

4 2
1
1
2
2

Sample Output

12
2

HINT

用 X(k) 表示 X 是以 k 进制表示的字符串。

一种最优方案:令 00(2) 替换第 1 种单词,01(2) 替换第 2 种单词,10(2) 替换第 3 种单词,11(2) 替换第 4 种单词。在这种方案下,编码以后的最短长度为:

1×2+1×2+2×2+2×2=12
最长字符串 si 的长度为 2。

一种非最优方案:令 000(2) 替换第 1 种单词,001(2) 替换第 2 种单词,01(2) 替换第 3 种单词,1(2) 替换第 4 种单词。在这种方案下,编码以后的最短长度为:

1×3+1×3+2×2+2×1=12
最长字符串 si 的长度为 3。与最优方案相比,文章的长度相同,但是最长字符串的长度更长一些。

对于所有数据,保证 2≤n≤100000,2≤k≤9。
选手请注意使用 64 位整数进行输入输出、存储和计算。

题解:

如果没有想到Huffman就跪了。。
分析题目,发现出现次数其实就是权重,我们要求的就是一种编码方案使得权重×编码长和最小,可以直接套k叉Huffman树乱搞。
类比合并果子,考虑倒着进行编码。从叶子节点开始编码,每次取出最小k个数合成一个x,然后编码长加1(实际上是倒着的,但其实是一样的),再把x扔回去,以此类推。
注意:
可能会有空节点,即可能存在一个节点儿子不足k个,这就需要补零以防出错,常用的判断方法:(n-1)%(k-1),等于0代表是满k叉树。
(因为对于一棵满k叉树,任意节点要么有k个儿子,要么没有儿子,设叶子节点有x个,则(n-x)*k=n-1,推导一下即可)

Code:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
#define LL long long
struct H{
    LL w; int l;
    bool operator < (const H &a) const {
        if (w!=a.w) return a.w<w;
        return a.l<l;
    }
};
priority_queue<H> h;
int n,k,nn; LL ans=0;
int in(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x;
}
LL Lin(){
    LL x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+(LL)(ch-'0'),ch=getchar();
    return x;
}
int main(){
    n=in(),k=in(); nn=n;
    for (int i=1; i<=n; i++){
        LL x=Lin();
        h.push((H){x,1});
    }
    if ((n-1)%(k-1)) nn+=(k-1)-((n-1)%(k-1));
    for (int i=n+1; i<=nn; i++)
        h.push((H){0,1});
    while (nn>1){
        LL s1=0; int s2=0;
        for (int i=1; i<=k; i++){
            H x=h.top(); h.pop();
            s1+=x.w; s2=max(s2,x.l);
        }
        ans+=s1; nn-=(k-1);
        h.push((H){s1,s2+1});
    }
    printf("%lld\n%d\n",ans,h.top().l-1);
    return 0;
}
《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第3章数据同步 我们将数据釆集分为日志采集和数据库数据同步两 部分。数据同步技术更通用的含义是不同系统间的数据流转,有多种不 同的应用场景。主数据库与备份数据库之间的数据备份,以及主系统与 子系统之间的数据更新,属于同类型不同集群数据库之间的数据同步。 另外,还有不同地域、不同数据库类型之间的数据传输交换,比如分布 式业务系统与数据仓库系统之间的数据同步。对于大数据系统来说,包 含数据从业务系统同步进入数据仓库和数据从数据仓库同步进入数据 服务或数据应用两个方面。本章侧重讲解数据从业务系统同步进入数据 仓库这个环节,但其适 阅读详情

相关推荐

WPF基础系列六:MVVM框架

MVVM框架 文章目录MVVM框架前言一、MVVM框架简介1. 什么是MVVM?2. MVVM的优势3.MVVM的应用场景二、MVVM使用及示例 前言 在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。 与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过

iceberg7012的博客 2万+

BZOJ3876支线剧情

3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 684 Solved: 417 Description 【故事背景】 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等。不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情。这些游戏往往 都有很多的支线剧情,现在JYY想花费最

DCrusher's blog 1196

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2180

BZOJ 2733: [HNOI2012]永无乡

[HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3211  Solved: 1699 [Submit][Status][Discuss] Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛

BlackJack 7444

无人机避障——4DMmvRadar三维点云坐标转换到无人机坐标系(三)

无人机避障——4DMmvRadar三维点云坐标转换到无人机坐标系(三)

weixin_45390670的博客 1869

opencv 常用函数总结

本文是一份OpenCV图像处理的常用函数总结,详细介绍了图像的读入、显示、保存、像素处理、图像属性获取、基础操作、阈值处理、图像平滑、形态学转换以及直方图处理等关键技术。文章通过代码示例和参数说明,帮助读者快速掌握OpenCV在图像处理领域的应用。

weixin_44063529的博客 1600

优快云网盘入口

http://yun.baidu.com/xcloud/csdn/pan/disk/home

heyzol的博客 2万+

实验记录 | 如何拆分scATAC-seq数据成为单个细胞?(1、解决barcode问题)

在师兄的帮助下,我得到了师兄筛选过的细胞的barcode的数据,那么接下来我想根据这些barcode,将来源于同一个barcode的细胞的reads提取出来,这个还是一个蛮有技术含量的事情的,因为上次我有使用过perl的脚本进行提取,最后的实验结果很糟糕,故而这件事情一直搁置到现在,没有继续去做(我的脚本的编写能力还是有待于加强,可能是刚刚喝了奶茶,和老妈弟弟聊了好多闲话,很开心,觉得在某种程度上休息够了,对于工作也是一种非常快乐和积极的状态了)。 0。前期失败尝试回顾 ...

weixin_40640700的博客 1887

根据hash值找到bt种子的磁力下载链…

有时大家需要通过某个bt种子(torrent)下载某些资源,但无法直接找到.torrent格式的附件或其下载地址。比如,在某论坛限于权限只能看到hash信息(一串hash值),而"磁力链接" 是隐藏的,或需要花积分,亦或有附件,但附件的下载链接失效或需要积分才能下载。此时可以自行构造磁力链接,然后进行正常的下载。 下载方法: 画皮2 hash:E5757D533B36907745...

极客学长Bravo | 突破信息差 | 副业生财有术 15万+

从零开始学习AI人工智能本体论:概念与实战

本文旨在为初学者提供一个全面而易于理解的人工智能本体论入门指南。我们将覆盖从基本概念到实际应用的全过程,帮助读者理解本体论在AI系统中的核心作用。核心概念与联系:介绍本体论的基本概念和原理核心算法与操作步骤:详细讲解本体构建和推理方法项目实战:通过实际案例展示本体论的应用实际应用场景:探讨本体论在不同领域的应用未来发展趋势:展望本体论在AI领域的前景本体论(Ontology): 在AI中,指对特定领域概念及其关系的明确形式化描述。

AI智能探索者的博客 868

提示工程从初级到高级:如何评估提示词的鲁棒性?架构师分享测试方法

鲁棒性(Robustness)原本是工程领域的概念,指系统在“非理想条件”下保持性能稳定的能力。输入鲁棒性:面对不规范、有噪音、格式变异的用户输入,提示能否引导模型输出正确结果?模型鲁棒性:同一提示在不同大模型(或同一模型的不同版本)下,输出是否一致?场景鲁棒性:在边界场景(极端case、歧义case、多任务混合)下,提示能否保持逻辑一致性?提示词V1:请将以下用户评论分类为「正面」「中性」或「负面」:{comment}。要求:输出唯一类别,不要额外说明。

小程序开发 496

图片工具网址导航 处理图片免费网站集合

图片工具网址导航 处理图片免费网站集合 ???? 图床: ???? 路过图床 :专业图床 sm:图床首推 upload.cc:老牌图床 免费商用图库???? pixabay:支持中文搜索 unsplash:最全最多 gratisography:有特色 剪切图片 ???? Smart Resize:也许是世界上最快且最智能的在线批量裁剪图片工具 删除背景 ???? remove.bg:删除背景生成透明图片 图片压缩 ???? tinify:最好用,一次最多处理2

wzg0817的博客 1万+

SAP-ABAP:SAP采购业务核心表关联关系详解

MM(核心)、FI(财务)、SD(计划协议):PR → PO → GR → MIRO → FI过账。

baidu_35680696的博客 930

【BZOJ4198】【NOI2015】荷马史诗(贪心,Huffman树)

【BZOJ4198】【NOI2015】荷马史诗(贪心,Huffman树) 题面 BZOJ 洛谷 题解 合并果子都是不知道多久以前做过的了。现在才知道原来本质就是一棵哈夫曼树啊。 这题我们仔细研究一下题目的意思。 就是让你构造一个\(K\)叉树,所有的权值都放在叶子节点上,求权值乘深度和的最小值。 如果\(K=2\),我们发现这就是合并果子。 \(K>2\),那么不过就是合并果子加强版,把原来...

weixin_30292745的博客 82

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【BZOJ4198】[Noi2015]荷马史诗【k叉Huffman树】【贪心】

【题目链接】 学习一发NOIP初赛知识。 /* Pigonometry */ #include #include #include using namespace std; typedef long long LL; int n, k, top; struct _data { LL w, h; bool operator < (const _data &x) const

BraketBN 710

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树

NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树 抱歉因为NOIP集训,好长时间没再写题解了。 NOI 2015也就只有这道题一看就能懂了…… 4198: [Noi2015]荷马史诗 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 922  Solved: 473[Submit]...

BUPT-Icontofig的博客 313

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

bzoj4198 [Noi2015]荷马史诗(Huffman编码+stl)

题目给出的定义显然就是让我们求Huffman编码。 不过可能是K叉的,我们加几个0补全就好了。 为了满足第二个要求,贪心的权值相同时深度小的优先。 #include &lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 100010 #define pi...

Icefox的博客 342

[bzoj]3876: [Ahoi2014]支线剧情

可以看出来是有上下界的费用流,我们对于一条边权为z的边u,v,从s向u连一条容量为1的边,从u到v连上容量为 INF的边,让此边可以重复走。对于每个点p,从p到T连上一条流量为p,费用无的边,再从x到1连上一条费用无, 流量无限的边,直接跑网络流就行了。 跑的好慢啊。。。 #include #include #include #include using namespace std

社会福利公社 4316

bzoj 3876 [Ahoi2014]支线剧情

有上下界费用流

我要吃熊猫 2444

HashCode

HashCode 1.最底层的实现方法为:在Object .java中 public native int hashCode(); 2.在HashMap.java中的hashcode方法: public final int hashCode() { return Objects.hashCode(key) ^ Objects.hashCode(value); } 3.在Objects中的hashcode方法: public static int hashCode(Object o) {

qq_38077040的博客 8307

MSVC and MinGW DLLs

Assume we have a testdll.h, testdll.c, and testmain.c. In the first case, we will compile testdll.c with MinGW, and let the MSVC-compiled testmain call it. You should use gcc -shared -o testdll.dll

heyzol的博客 4469

[Luogu P3723] [BZOJ 4827] [AH2017 HNOI2017]礼物

洛谷传送门 BZOJ传送门 题目描述 我的室友最近喜欢上了一个可爱的小女生。马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她。每个手环上各有 nnn 个装饰物,并且每个装饰物都有一定的亮度。 但是在她生日的前一天,我的室友突然发现他好像拿错了一个手环,而且已经没时间去更换它了!他只能使用一种特殊的方法,将其中一个手环中所有装饰物的亮度增加一个相同的自然数 ccc...

LPA的博客 5529

并查集

简述并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 需要实现的操作有:合并两个集合,判断两个元素是否属于一个集合。 这里介绍的主要是普通的并查集,很多情况下使用的并查集是需要扩展的,根据使用情况的不同,有很多差别,这里仅仅是最基本的算法。 复杂度T=O(n*α(n)) , 其中α(x),对于x=宇宙中原子数之和,α(x

中 1万+

java security 系列 什么是安全框架(一)

java security 安全框架潜入深出系类 security 简介 security 简介

weixin_44684812的博客 735

MySQL是怎样运行的(三)

mysql字符集和比较规则

qq_38077040的博客 3455

Cheese Aizu - 0558题解

チーズ () 問題 今年も JOI 町のチーズ工場がチーズの生産を始め,ねずみが巣から顔を出した.JOI 町は東西南北に区画整理されていて,各区画は巣,チーズ工場,障害物,空き地のいずれかである.ねずみは巣から出発して全てのチーズ工場を訪れチーズを 1 個ずつ食べる. この町には,N 個のチーズ工場があり,どの工場も1種類のチーズだけを生産している.チーズの硬さは工場によって異なっており,硬...

Little_Small_Joze的博客 1万+
上一篇: 【dp】【NOI 2015】【bzoj 4197】寿司晚宴
下一篇: 【容斥(其实并不是)】【USACO】数三角形
morestep
博客等级 码龄12年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值