字串壓縮

2021-06-21 15:01:26 字數 1617 閱讀 6191

程式設計之美比賽的一道題,一直是re,不知道為什麼。可能是我對g++不熟悉吧,**貼出來,如果誰發現問題,告訴我一下!

時間限制:

8000ms

單點時限:

4000ms

記憶體限制:

256mb

你的硬碟上有乙個神秘的檔案占用了大量空間,你決定將其壓縮以節省空間。不幸的是,你還沒有安裝任何壓縮軟體,所以你決定自己編寫乙個壓縮程式。你發現這是乙個文字檔案,包括很多行。每行是乙個長度恰好為l的字串,而且字串可能有重複。行的順序並不重要,換言之,打亂順序之後仍然可以認為檔案內容和原來相同。

例如,這個檔案的內容可以是這樣的:

bar

carbat

catcat

經過一段時間觀察,你發現同一列的字元往往是相同的,於是你設計了乙個簡單的壓縮框架。首先以某種策略調整行的順序,然後把所有字串按照先列後行的順序變換成單個字串,例如上面的例子,不調整順序則直接變換成:

bcbccaaaaarrttt

然後使用遊程編碼(rle)的到壓縮變換後的字串:

1b1c1b2c5a2r3t

當然也可以先調換順序:

car

catcat

batbar

這樣的壓縮字串為:

3c2b5a1r3t1r

比不調整順序的稍短一些。

現在,你已經得到了兩個不同的壓縮字串,你想知道他們解壓後的檔案是否相同,請寫乙個程式解決這個問題。

第一行是乙個整數t (t <= 30),表示測試資料組數。

每組測試資料佔三行。第一行為整數l,表示原始檔案中每一行字串的長度。第二行和第三行分別是兩個壓縮字串,格式如c1 n1 c2 n2 … cmnm,表示字元ci連續出現了ni次。具體格式見樣例。輸入字串只含a到z的小寫字母,確保壓縮字串合法有效,且不為空。

對每組測試資料,首先輸出」case x: 」,其中x表示測試資料編號。如果兩個壓縮字串對應於相同的檔案內容,則輸出」yes」,否則輸出」no」。

小資料:1<=l<=10, 1<=ni

<=100,壓縮字串長度不超過10^4

大資料:1<=l<=1000, 1<=ni

<=10^9,壓縮字串長度不超過10^6

樣例輸入

2

31b1c1b2c5a2r3t

3c2b5a1r3t1r

220a20b10a20b10a

20a20b20a20b

樣例輸出

case 1: yes

case 2: no

#include#includeusing namespace std;

string getstr(string str)

for ( unsigned long long i=0;i>t;

for (int k=1;k<=t;k++)

{ cin>>l;

cin>>c1;

cin>>c2;

bool test=true;

string c=getstr(c1);

string csub=getstr(c2);

if (c.length()!=csub.length())

{ cout<<"case "<

字串 字串壓縮

標題 字串壓縮 類別字串處理 時間限制 1s記憶體限制 1000kb 問題描述 有一種簡單的字串壓縮演算法,對於字串中連續出現的同乙個英文本元,用該字元加上連續出現的次數來表示 連續出現次數小於3時不壓縮 例如,字串aaaaabbbabaaaaaaaaaaaaabbbb可壓縮為a5b3aba13b4...

字串壓縮

include using namespace std 題目描述 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1.僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcb...

字串壓縮

通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2 壓縮欄位的格式為 字元重複的次數 字元 例如 字串 yyy...