JSOI2007 字元加密

2021-10-09 18:30:48 字數 789 閱讀 1498

抽了點時間複習了一下字尾陣列

這道題其實不難

將字串拉環成鏈, 然後再求字尾陣列即可

這樣字尾排序出來,與原題所要求的順序相符(可以自行推理)

#include

#include

#include

#include

using

namespace std;

const

int maxn =

2e5;

char str[maxn +10]

;int rk[maxn +10]

, sa[maxn +10]

, id[maxn +10]

;namespace sa

using

namespace sa;

intmain()

namespace sa

void

get_sa

(int n)

rsort

(n ,m)

;for

(register

int len =

1; p < n; m = p, len <<=1)

for(

register

int i =

1; i <= n;

++i)

if(sa[i]

<= n /2)

printf

("%c"

, str[sa[i]

+ n /2-

1]);

}}

JSOI2007 字元加密

如果我們把字串複製乙份,拼接到後面。我們可以發現,字串的所有旋轉之後的串,都會存在於拼接之後的字串字尾當中。多出來的不會影響,很好證明 所以實際上我們對拼接後的字串字尾排序,只要排名為i的sa i 小於等於最開始字串長度len,那麼這個排名就是合法的,所以我們從小到大列舉即可。ac pragma g...

JSOI2007 字元加密

喜歡鑽研問題的js 同學,最近又迷上了對加密方法的思考。一天,他突然想出了一種他認為是終極的加密辦法 把需要加密的資訊排成一圈,顯然,它們有很多種不同的讀法。例如 jsoi07 可以讀作 jsoi07 soi07j oi07js i07jso 07jsoi 7jsoi0 把它們按照字串的大小排序 0...

JSOI2007 字元加密

學了字尾陣列 做了字尾陣列裸題23333 對於這題來說 只需要把長度為len的字串變成長度為2 len的字串 跑一遍字尾陣列 然後就可以輸出結果辣!快樂!上 板子打得醜qaq include usingnamespacestd charss 1000005 intc 1000005 rank 100...