喜歡鑽研問題的js 同學,最近又迷上了對加密方法的思考。一天,他突然想出了一種他認為是終極的加密辦法:把需要加密的資訊排成一圈,顯然,它們有很多種不同的讀法。
例如『jsoi07』,可以讀作: jsoi07 soi07j oi07js i07jso 07jsoi 7jsoi0 把它們按照字串的大小排序: 07jsoi 7jsoi0 i07jso jsoi07 oi07js soi07j 讀出最後一列字元:i0o7sj,就是加密後的字串(其實這個加密手段實在很容易破解,鑑於這是突然想出來的,那就^^)。 但是,如果想加密的字串實在太長,你能寫乙個程式完成這個任務嗎?
輸入檔案包含一行,欲加密的字串。注意字串的內容不一定是字母、數字,也可以是符號等。
輸出一行,為加密後的字串。
輸入 #1
jsoi07
輸出 #1
i0o7sj
對於40%的資料字串的長度不超過10000。
對於100%的資料字串的長度不超過100000。
用最常見的處理環的方式將原字串複製加入新串末尾
#include#define n 200700
using namespace std;
string s;
int n,sa[2][n],rk[2][n],v[n],a[n];
int k,cnt;
char ans[n];
void calas(int *sa,int *rk,int *sa,int *rk)
void get_sa()
P4051 JSOI2007 字元加密 字尾陣列
喜歡鑽研問題的js 同學,最近又迷上了對加密方法的思考。一天,他突然想出了一種他認為是終極的加密辦法 把需要加密的資訊排成一圈,顯然,它們有很多種不同的讀法。例如 jsoi07 可以讀作 jsoi07 soi07j oi07js i07jso 07jsoi 7jsoi0 把它們按照字串的大小排序 0...
洛谷4051 JSOI2007 字元加密(SA)
題目鏈結 真是一道良好的sa模板題 首先,由於涉及到從左邊移動到右邊這個過程,我們不妨直接把字串複製一遍,接在後面。然後直接構造字尾陣列,按排名從小到大,列舉所有的位置,如果這個字尾的起始點是在原串中的,那麼就輸出當前字尾的七十點往後第n個字元,就能直接解決了 include include inc...
JSOI2007 字元加密
如果我們把字串複製乙份,拼接到後面。我們可以發現,字串的所有旋轉之後的串,都會存在於拼接之後的字串字尾當中。多出來的不會影響,很好證明 所以實際上我們對拼接後的字串字尾排序,只要排名為i的sa i 小於等於最開始字串長度len,那麼這個排名就是合法的,所以我們從小到大列舉即可。ac pragma g...