4198 Noi2015 荷馬史詩

2021-08-15 15:23:11 字數 801 閱讀 6023

題目鏈結

題目大意:一篇文章有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 

using

namespace

std;

#define ll long long

ll n,k,ans;

struct node

node(ll _,ll __)

}tmp;

bool

operator

<(node x,node y)

priority_queueq;

ll readin()

void work()

q.push(node(tot,maxd+1));

ans+=tot;n-=k-1;

}printf("%lld\n%lld\n",ans,q.top().dep-1);

}void init()

int main()

BZOJ 4198 Noi2015 荷馬史詩

追逐影子的人,自己就是影子。荷馬 allison 最近迷上了文學。她喜歡在乙個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的 荷馬史詩 但是由 奧德賽 和 伊利亞特 組成的鴻篇巨制 荷馬史詩 實在是太長了,allison 想通過一種編碼方式使得它變得短一些。一部 荷馬史詩 中有 n 種不...

bzoj4198 Noi2015 荷馬史詩

題目鏈結 一篇文章n個單詞,每個出現了 次,用k進製數代替單詞,使得任意單詞不是另乙個單詞的字首。如何選擇使文章的總長度最小,且在總長度最小情況下最長的k進製數的長度最小是多少 lcf不寫部落格 我只好自己寫了。將每個單詞看成權值為 的節點,很顯然是個k叉哈弗曼樹,考慮k 2的情況,就是乙個 合併果...

NOI2015 荷馬史詩

題面 追逐影子的人,自己就是影子 荷馬 allison 最近迷上了文學。她喜歡在乙個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的 荷馬史詩 但是由 奧德賽 和 伊利亞特 組成的鴻篇巨制 荷馬史詩 實在是太長了,allison 想通過一種編碼方式使得它變得短一些。一部 荷馬史詩 中有n種...