p1124 檔案壓縮
題目背景
提高檔案的壓縮率一直是人們追求的目標。近幾年有人提出了這樣一種演算法,它雖然只是單純地對檔案進行重排,本身並不壓縮檔案,但是經這種演算法調整後的檔案在大多數情況下都能獲得比原來更大的壓縮率。
題目描述
該演算法具體如下:對乙個長度為n的字串s,首先根據它構造n個字串,其中第i個字串由將s的前i-1個字元置於末尾得到。然後把這n個字串按照首字元從小到大排序,如果兩個字串的首字元相等,則按照它們在s中的位置從小到大排序。排序後的字串的尾字元可以組成乙個新的字串s』,它的長度也是n,並且包含了s中的每乙個字元。最後輸出s』以及s的首字元在s』中的位置p。舉例:
s:example
1、構造n個字串
example
xamplee
ampleex
mpleexa
pleexam
leexamp
eexampl
2、將字串排序
ampleex
example
eexampl
leexamp
mpleexa
pleexam
xamplee
3、壓縮結果
xelpame s』
7 p由於英語單詞構造的特殊性,某些字母對出現的頻率很高,因此在s』中相同的字母有很大機率排在一起,從而提高s』的壓縮率。雖然這種演算法利用了英語單詞的特性,然而在實踐的過程中,人們發現它幾乎適用於所有的檔案壓縮。
請你編乙個程式,讀入s』和p,輸出字串s。
輸入格式:
輸入檔案共有三行,第1行是乙個整數n(1<=n<=10000),代表s』的長度,第2行是字串s』,第3行是整數p。
輸出格式:
僅包含一行s。
輸入樣例:
7 xelpame
7輸出樣例:
example
題解:
這題其實看似很複雜,看似完全沒有頭緒,其實如果我們仔細讀題,會注意到這樣一件事情,就是把我們得到的 s』 中字母排序後得到的 l,每位是對應 s』 的字母為結尾的字串的第一位。可能沒太聽懂,來顆栗子:
初始字串為 bca我是倒著推的。也就是第乙個確定後,到 l 中尋找第乙個(最前面的,後面的「最後乙個」同理)相同的字母,實際上就是第乙個字母(因為題目中說如果第乙個大小相等按照原順序),那麼 it 對應的尾巴(called now)就是最後乙個,接下來,在 l 中找最後乙個和 now 相同的字母,這個字母同樣也就是 now ,那麼 it 對應的尾巴就是 倒數第二個……生成 bca,cab,abc
排序 abc,bca,cab
所以輸入資料是:3 cab 3
cab 排序後 abc
生成的串排序後 a-c,b-a,c-b,中間的減號為省略部分,很明顯正好組成了每個生成字串的頭和尾,而頭和尾正好又是相鄰關係(如果看成環),由此我們可以通過第乙個推出所有的。
#include
#include
#include
using
namespace
std;
const
int maxn=10005;
int n,p,tt;
char s[maxn],l[maxn],ans[maxn];
int main()
}//如果是第乙個,那麼肯定找最前面那個相同的,否則找最後的。找到後要殺掉,否則後面會誤判的。
else
for (int j=n;j;j--)
}ans[n-i+1]=s[now];
}for (int i=1;i<=n;i++) putchar(ans[i]);
return
0;}
P1124檔案壓縮 字串模擬
題目鏈結 提高檔案的壓縮率一直是人們追求的目標。近幾年有人提出了這樣一種演算法,它雖然只是單純地對檔案進行重排,本身並不壓縮檔案,但是經這種演算法調整後的檔案在大多數情況下都能獲得比原來更大的壓縮率。該演算法具體如下 對乙個長度為 n n 的字串 s role presentation style ...
5 檔案許可權 檔案壓縮打包
命令 解釋ls lh 顯示許可權 chmod ugo rwx dir1 新增所有者 群組 其他人在dir1的讀 寫 執行許可權 chmod go rex dir1 刪除群組 其他人對dir1讀 寫 執行許可權 chown user1 file1 更改file1的所有者為user1 chown r u...
Foj 1409 檔案壓縮
提高檔案的壓縮率一直是人們追求的目標。近幾年有人提出了這樣一種演算法,它雖然只是單純地對檔案進行重排,本身並不壓縮檔案,但是對經這種演算法調整後的檔案進行壓縮,在大多數情況下都能獲得比原來更大的壓縮率。該演算法具體如下 對乙個長度為n的字串s,首先根據它構造n個字串,其中第i個字串由s向左迴圈移位i...