模板 最小表示法

2022-05-20 14:32:18 字數 477 閱讀 5703

字串的最小表示是該字串的所有迴圈同構串中字典序最小的那個串。

根據其迴圈同構結構,採用破環成鏈,即:倍增的形式來表示。

引理:若兩個迴圈同構串\(s[i+k],則對於任意的\(i\in[i,i+k]\),均不可能是最優解。

證明:\(s[i+k],所以對任意的\(i'\in[i,i+k]\),有串\(s[j'+p],其中\(i'+p=j'+p=i+k=j+k\),證畢。

**如下

#include using namespace std;

const int maxn=1e6+10;

char s[maxn];

int n;

void read_and_parse()

void solve()else

} printf("%d\n",min(i,j));

}int main()

最小表示法 模板

最小表示法就是對於乙個迴圈字串,其字典序最小的狀態 顯然任意乙個迴圈串的最小表示法是唯一的,那麼可以同過比較兩個迴圈串的最小表示法來判斷它們是否相同 對於樸素演算法 初始化 i 0,j 1,k 0 若 s i s j j 若 s i s j i j,j 若 s i s j 則 k 直至 s i k ...

最大 最小表示法模板

用i 0,j 1,k 0,表示從i開始k長度和從j開始k長度的字串相同 i,j表示當前判斷的位置 當我們str i str j 時,根據上面k的定義,需要進行k 1操作 當str i str j 時,i位置比j位置上字典序要大,固不能使用i作為開頭,又因為i開頭和j開頭的有k個相同的字元,固執行 i...

最小表示法

最小表示法就是找出字串s的的迴圈同構串中字典序最小的乙個。那麼什麼是迴圈同構串呢。是 設s bcad 且s 是s 的迴圈同構的串。s 可以是 bcad 或者cadb,adbc,dbca 即在字串s中從i 0開始,從i迴圈到字串末尾,再從頭迴圈到i,所形成的字元就是s迴圈同構串。因為這樣的同構串不止乙...