【題目描述】
最近國安人員截獲了乙份 rb 國的秘密情報, 全文都是經過加密的,每個單詞都很長。破譯人員想到先把單詞化簡一下,方法是把每個單詞盡量取短些的字首,但所取的字首不能是其他單詞的字首。這個任務現在就交給你來完成。
解釋:「字串s
1是s2
的字首」意思是把字串s
2的後面去掉某些字元,只保留與s1
相同長度的子串,則s1
就稱為s2
的字首。如:「abc
」是「abcaade
」和「abc
」的字首,但不是「
abadc
」的字首。
資料範圍單詞數 n, 1<=n<=50; 每個單詞長度不超過 50;並且都是由小寫字母構成。保證所給單詞沒有乙個單詞是另乙個單詞的字首。
【輸入檔案 addreviate.in】
第一行乙個整數 n,表示單詞的個數。下面有 n 行,每行乙個單詞。
【輸出檔案 addreviate.out】
共 n 行,每行乙個單詞,是對應上面 n 個單詞化簡後的單詞。
【樣例輸入】
樣例測試點#1:
3abc
efgijh
樣例測試點#2:
3aac
aadaae
【樣例輸出】
樣例測試點#1:ae
i樣例測試點#2:
aacaad
aae思路:這題算是送分題中的高難度題了,對於各位高手來說不是什麼問題,我說這題是為了提一下乙個庫函式,這個庫函式是我們一般不經常用的,廢話不多說,我先從頭講起吧
這題要求我們保留n個字串的字首,使得這些字首和其他字首不相同,縮小儲存空間,看起來很簡單,其實還是有點複雜滴
例如題目中給的樣例:
可以先把第乙個字元按照圖中紅線分段,提取第一行第乙個字元,來和下面的每乙個字串進行對比
,如果這個段並不在下面任何乙個字串中是字首,就可以在後面加上個'\0'表示擷取這一段
之後對每一行都採取這樣的措施,就可以實現保留字首
**如下:
1 #include 2 #include3int
main()416
for(i=0;i)
17 29}
30if(j>=n)//
這個空的位置前面一段保證字首不重複,就可以標記為空了
3135
else
//否則還要還原回去,繼續尋找下一位
36 39}
40}41for(i=0;i)
42
45return0;
46 }
NOIP2016提高組總結
這次noip可以用幾個字來形容 浪的飛起,頹的不行。中午從校門出發,在車上睡了半個車程。4 00左右,霧比較大,遠處的小蠻腰若隱若現。你好,廣州。5 00,symbol叫我們去看考場,結果被拒在門外,然後大家都散了。我與其它幾位小夥伴匆匆吃完飯,回到酒店,該看電視看電視,中途開會,提醒我們一些注意事...
NOIP2016 提高組 總結
這是倒數第三次noip了。今年我初三。去年的傷痕還未褪去,我在比賽前意識到,當務之急其實是鞏固基礎而非深究一些難題。於是賽前兩周,我認真讀了白書的前面部分,尤其重點練習了dp。dp作為基礎演算法之一,其靈活性極高,所以可以出得很難,也是各種比賽的寵兒。練好dp是尤為重要的。賽前好幾場模擬賽都做得很爛...
NOIP2016提高組總結
來到了廣州,不錯啊,旁邊的飯店很多,可以好好的腐一下了。一群人走進了乙個小巷,住進了乙個七天酒店,發現房間裡面好小啊。吃完飯後,一直都在腐敗。通知開會的同學並沒有到我們的房間來,結果在結束開會的前幾分鐘我們才過去。早早的睡了 第一天,狀態不錯。早早的到了考場。開啟c 發現除錯不了,嚇了我一大跳。做到...