不同的縮寫

2021-09-11 01:22:40 字數 1510 閱讀 9157

題目描述

你在寫一款 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屬性,其 他的屬性...