hdu3374
題意:給你乙個字串,問這個字串經過移動後的字典序最小的字串的首字元位置和字典序最大的字串的首字元的位置,和能出現多少次最小字典序的字串和最大字典序的字串
題解:利用最小表示法與最大表示法o(n)複雜度求出最小字典序和最大字典序串出現位置,然後利用kmp求出next,利用next陣列性質求出迴圈節次數,因為最小和最大字典序串出現次數等於迴圈節次數(因為有幾個迴圈節,我們就會有幾個最小串或最大串的起始點)
#include
using
namespace std;
const
int maxn=
2000005
;int nxt[maxn]
;char s[maxn]
;int n;
intgetmin()
}return
min(i,j);}
intgetmax()
}return
min(i,j);}
void
getnxt()
//注意:不同的getnext寫法要注意區分,否則就會錯
else}}
void
getnex()
}int
main()
else
if(n==1)
else
else
printf
("%d %d %d %d\n"
,mi+
1,ko,mx+
1,ko);}
}return0;
}
HDU 3374(最小表示法)
題目鏈結 題意 給幾個字串,求每個字串的最小迴圈表示,最大迴圈表示 輸出序號最小的 以及出現的次數。思路 前面兩個直接用模板可求解。出現次數實際上就是問迴圈節的個數,這時我們可以想到kmp演算法中的nextval陣列。ac include include include includeusing n...
HDU 3374 最小 大表示法 KMP
題意 給定乙個串s,該串有strlen s 個迴圈同構串,要求輸出字典序最小的同構串的下標,字典序最小的出現次數,最大的同構串的下標,字典中最大的出現次數。思路 對於求迴圈同構的字典序最小可以用最小表示法求得,最大也是一樣。然後設ds為字串s s。然後就可以用kmp求最小串在ds出現的次數和最大串出...
最大最小表示法
時間複雜度 o n 應用 比較兩個環形串是否是同一字串 判重 判同分異構等 判同分異構 都化為最小或最大 看有幾個不一樣的就好了。放到set裡。最小表示法是我在看插頭dp的時候看到的乙個名詞,就先來看了一下這個演算法,還是蠻簡單的,有乙個首位相連的字串,我們要尋找乙個位置,從這個位置向後形成乙個新字...