題目描述
你在寫一款 galgame 的劇情(的**)。
在這個遊戲中一共有 n 個角色。你需要編寫一些關於這些角色的對話內容。然而,在寫這些對話內容之前,都要寫一段關於角色資訊的**,就像這樣:
character("alex", color = "#fffc3a")
你覺得這樣好麻煩。你決定把它簡化一下。你打算用角色名字的乙個非空子序列(可以不連續)來作為它的簡稱。
當然,不同的角色要用不同的字串作為簡稱,否則你就變數重名了。
你想確定乙個簡稱的分配方案使得所有角色中最長的簡稱盡量短,這樣你打起**就會方便一些。
輸入格式
從檔案diff.in
中讀入資料。
第一行乙個正整數 nnn 。
接下來 nnn 行,每行乙個由小寫字母組成的字串,代表乙個角色的名字。
不同的角色可能會有相同的名字。
輸出格式
輸出到檔案diff.out
中。
如果不存在一種分配簡稱的方案滿足條件,輸出−1
。
否則第一行輸出乙個正整數,表示最長的簡稱的最小長度。
接下來 nnn 行每行乙個字串,按順序表示每個角色的簡稱。
若有多種方案滿足條件,那麼你可以輸出任意一種。
樣例
11
night
nealchen
beimingyouyu
echo
rankinf
dntcrybecthlev
lagoon
cycalphagem
leehwincing
clin
1ga
merb
oylw
c
資料範圍與提示
保證 n≤300n \le 300n≤300 ,每個名字的長度不超過 300300300 。
subtask 1(30 pts) : n≤4n \le 4n≤4
subtask 2(30 pts) : n≥100n \ge 100n≥100 , 串長和串的內容在題目範圍內均勻隨機。
即串長在 [1,300][1,300][1,300] 內隨機,串的每一位在 aaa 到 zzz 之間隨機。
subtask 3(40 pts): 無特殊限制
solution
假設我們已經知道了每個串的所有子串行,那麼把子序列看成點,和串跑匹配即可。
那麼需要找出每乙個串的所有子串行(或者n個,n個已經足夠)。
假設我們現在求出的乙個串的前i個字元的所有子串行
我們考慮加入i+1個字元,對於每乙個字母,記乙個指標,表示上一次這個指標之前的串後面加過這個字母了。
這樣就不用判重了。
注意對映比較繁雜,我用了trie樹實現。
posted @
2019-02-16 22:55
liankewei123456 閱讀(
...)
編輯收藏
jzoj 6071 不同的縮寫 網路流
題目大意 給定n nn個字串,要求我們從每個字串中選出乙個子串行 可以不連續 要求每個選出的子串行都不同,並使得最長的最序列最短。要求輸出所求答案,並輸出一組可行解。n 300 n 300 n 30 0,每個字串長度不超過300.分析 對於每乙個字串來說,只有前n nn長的子串行有用,因為無論如何都...
縮寫(二) IT領域縮寫詞的發音
縮寫詞或縮略語在計算機和通訊領域非常普遍,如果發音不准,往往會給口頭交流造成一定的障礙,有時甚至會鬧笑話。通過 一般情況下,如果不知道怎麼讀乙個縮寫詞,可以逐個字母的讀。但是,it詞彙中有一些已經有約定俗成的讀法 一般是美語讀法 試舉一二 術語 802.11 發音 eight oh two dot ...
CSS 顏色值的縮寫和字型的縮寫方法
一 css顏色值的縮寫 當設定的顏色是16進製制的色彩值時,如果每兩位的值相同,可以縮寫一半 例如 1 p 可縮寫為 p 2 p 可縮寫為 p二 字型縮寫 例如 body 可以縮寫為 body 注意 1 在使用這一縮寫方式時,你至少需要指定font size和font family屬性,其 他的屬性...