4198: [Noi2015]荷馬史詩
題目大意:一篇文章有n個單詞,其中第i個單詞的出現次數為w[i]。你要用k進位制串s[i]替換第i種單詞。要求:對於任意i!=j,都有s[i]不是s[j]的字首。
要使替換後的文章總長度最小。
求這個最小總長度。
在這個前提下,要使s[i]的最大長度最短,求這個最短的長度
題解:k叉哈夫曼樹
取最小的k個合併即可
發現只有當(n-1)%(k-1)=0的時候才能恰好合並,所以要新增k-1-(n-1)%(k-1)個權值為0高度為1的虛擬節點
用堆維護就好了
為了保證最大高度最小,把高度加成第二關鍵字
我的收穫:姿勢++
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,k,ans;
struct node{
ll val,dep;
node(){}
node(ll _,ll __){val=_,dep=__;}
}tmp;
bool operator <(node x,node y){return x.val>y.val||(x.val==y.val&&x.dep>y.dep);}
priority_queue<node> q;
ll readin()
{
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;
}
void work()
{
while(n>1){
ll maxd=0,tot=0;
for(ll i=1;i<=k;i++){
tmp=q.top();q.pop();
tot+=tmp.val;
maxd=max(maxd,tmp.dep);
}
q.push(node(tot,maxd+1 ));
ans+=tot;n-=k-1;
}
printf("%lld\n%lld\n",ans,q.top().dep-1);
}
void init()
{
n=readin();k=readin();
for(ll i=1;i<=n;i++) q.push(node(readin(),1));
ll remain=(n-1)%(k-1);
if(remain!=0) remain=k-1-remain,n+=remain;
for(ll i=1;i<=remain;i++) q.push(node(0,1));
}
int main()
{
init();
work();
return 0;
}
相關推薦
BZOJ 4198[Noi2015]荷馬史詩
表示 ans per 方案 滿足 amp opera priority int 4198: [Noi2015]荷馬史詩 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1408 Solved: 746[Submit][St
4198: [Noi2015]荷馬史詩 (哈夫曼樹基礎)
如何選擇 是否 scrip print for scanf 表示 stat tor 一、題目概述 4198: [Noi2015]荷馬史詩 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1545 Solved: 818[Su
4198: [Noi2015]荷馬史詩
題目連結 題目大意:一篇文章有n個單詞,其中第i個單詞的出現次數為w[i]。你要用k進位制串s[i]替換第i種單詞。要求:對於任意i!=j,都有s[i]不是s[j]的字首。 要使替換後的文章總長度最小。 求這個最小總長度。 在這個前提下,要使s[i]的最
[BZOJ]4198: [Noi2015]荷馬史詩
getchar 數據 stat 網上 clas tchar esp 存在 得到 題解: 提高組系列難度題.....竟然各種假貪心 瞄了網上結論 竟然 n%(k-1)不足1要補齊....orz這個真沒想到 漲知識漲知識.... 補齊以後直接類似合並果子 堆貪心就行了
[K叉哈夫曼樹]BZOJ 4198—— [Noi2015]荷馬史詩
題目概述 並不是很想寫概述啊。 這不是許可權題,來個連結大家自己看下吧:題目傳送門 解題思路 相信大家看來這道題之後都不難聯想到哈夫曼編碼的原理。 Ps:不知道哈夫曼編碼,問度娘去吧。 這麼看來這道題轉變為另外一個問題: 求一棵K叉哈夫曼樹的最
【BZOJ 4198】[Noi2015]荷馬史詩 哈夫曼編碼
clu tor space zoj col 具體實現 %d sca bool 合並果子加強版....... 哈夫曼樹是一種特別的貪心算法,它的作用是使若幹個點合並成一棵樹,每次合並新建一個節點連接兩個合並根並形成一個新的根,使葉子節點的權值乘上其到根的路徑長的和最短(等價
NOI2015 荷馬史詩 [哈夫曼樹]
per inpu h+ 正是 存在 space pre 節點 noi2015 Description 一部《荷馬史詩》中有n種不同的單詞,從1到n進行編號。其中第i種單 詞出現的總次數為wi。Allison 想要用k進制串si來替換第i種單詞,使得其滿足如下要求: 對於任意
[NOI2015]荷馬史詩
AC #define int() pop ace efi print tro air 題目:洛谷P2168、codevs5501。 題目大意:有n種單詞,每種單詞有一個出現次數。現在要用k進制字符串代表這些單詞,使得任意一個字符串不是另一個的前綴。問:最短的總長度是多少?
BZOJ4198: [Noi2015]荷馬史詩(哈夫曼樹)
成了 inpu const 包含 printf 來替 iso stat .com Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1824 Solved: 983[Submit][Status][Discuss] Desc
【huffman】bzoj4198:【UOJ#130】 [Noi2015]荷馬史詩
Description Time Limit: 10 Sec Memory Limit: 512 MB 追逐影子的人,自己就是影子。 ——荷馬 Allison 最近迷上了文學。她喜歡在一個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛
bzoj4198 [Noi2015] [荷馬史詩] Huffman 編碼
1.維護k叉樹,注意補零 2.用堆來維護最小的頻率和長度,每次向上合併,在合併時統計答案 3.如果 n % (k-1)=1那麼就不用補零(因為每次合併就相當於增加k-1個節點,所有如果能合併成一個節
貪心+哈夫曼樹--bzoj4198[NOI2015]荷馬史詩
傳送門 看到這個題一臉懵逼啊?難道是字串?? 結果一看題解,是什麼哈夫曼樹(不會啊) 這裡留個坑···還沒有十分了解哈夫曼樹是啥 但是看樣子好像就是一棵二叉樹,每次將權值小的合併成新的點 新點權值是原來的和 這個背景好像很裸??? Huffman樹
UOJ#130 【NOI2015】荷馬史詩 K叉哈夫曼樹
i++ getchar ext getch pre user sum spec getc 【NOI2015】荷馬史詩 鏈接:http://uoj.ac/problem/130 因為不能有前綴關系,所以單詞均為葉子節點,就是K叉哈夫曼樹。第一問直接求解,第二問即第二關鍵
LOJ#2132. 「NOI2015」荷馬史詩
amp bitset 感覺 nbsp 個數 none sin splay cstring $n \leq 100000$個數字,放進$k$叉樹裏,一個點只能放一個數,使所有數字乘以各自深度這個值之和最小的同時,最大深度的數字最小。 哈夫曼。這是我剛學OI那段時間看到的,感覺
bzoj 4198 [ Noi 2015 ] 荷馬史詩 —— 哈夫曼編碼(k叉哈夫曼樹)
log mes com can rest opera 編碼 type pro 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4198 第一次寫哈夫曼樹!看了很多博客。 哈夫曼樹 & 哈夫曼編碼:https:/
【BZOJ4198】【UOJ130】【NOI2015】荷馬史詩
【題目連結】BZOJUOJ【思路要點】如果將一個合法的分配方案放到字典樹上,那麼每一個關鍵節點均為葉子結點。考慮如何使答案最小化,資料範圍較大,考慮貪心。我們注意到一系列具有相同父親的葉子結點可以被看作
荷馬史詩(NOI2015)提高組
1. Problem Description 追逐影子的人,自己就是影子 ——荷馬 Allison 最近迷上了文學。她喜歡在一個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的《荷馬史詩》。但是由《奧德賽》和《伊利亞特》 組成的鴻篇鉅製《荷馬史詩》
【洛谷P2168】荷馬史詩
輸入 bool spa priority 新的 輸出格式 inline 格式 += 題目描述 追逐影子的人,自己就是影子 ——荷馬 Allison 最近迷上了文學。她喜歡在一個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的《荷馬史詩》。但是由《奧德賽》和《伊利亞
【NOI 2015】 荷馬史詩
print tor 優先 queue urn amp IT () 就是 【題目鏈接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4198 【算法】 不難發現,題目中所說的
哈夫曼樹 荷馬史詩-洛谷
這道題目做了五個多小時,主要還是不瞭解哈夫曼樹的一些細節問題,自己做個總結吧。 題目連結:https://www.luogu.org/problemnew/show/P2168 總結: 一:這道題目的一些收穫 1:求最終編碼文字的長度,不一定必須讓字元組成的編碼的長度資訊必須儲存在葉