HDU 4821 String(字串雜湊)

2021-09-26 04:22:24 字數 772 閱讀 1663

傳送門

題目大意就是給你乙個字串,然後問你在這個字串裡有多少個長度為m∗l

m*lm∗

l 的子串,並且這連續的 m

mm 個長度為 l

ll 的子串還要相互不一樣。

直接h as

hhash

hash

,選取乙個起始位置(1−

l)

(1-l)

(1−l

),然後每 l

ll 個 has

hhash

hash

一下,然後類似與尺取,取 m

mm 個,看是否是 m

mm 個字元的has

hhash

hash

值都不同。

#include#define ull unsigned long long

using namespace std;

const int maxn = 1e5 + 10, base = 13331;

ull hash[maxn], p[maxn];

int m, l;

ull get_hash(int x)

maps;

int main()

int ans = 0;

for (int i = 1; i + m * l - 1 <= len && i <= l; i++)

}printf("%d\n", ans);

}return 0;

}

HDU4821 字串雜湊 尺取

給你乙個字串s,問你滿足下面兩個條件的子串有多少個?s長度不超過100000,1 leq m l leq s的長度。首先可以採用字串hash將字串處理便於儲存,字串hash我是在網上找的乙個方法,實際上是找乙個基數base,然後採用base進製,可以採用模乙個大質數,也可以是直接採用unsigned...

Hdu6586 String 字串字典序貪心

給出乙個只包含26個字元的字串 s 1e5 要求從中取出長度為k的字典序最小的組序列,滿足所給的26個字母的限制條件,例如 l i,r i 表示i字元的數量關係限制 1.對於構造字典序最小的序列,通常是一位一位構造的。2.首先題目有限制條件,所以我們考慮一下什麼條件時才滿足限制條件。我們從a開始取,...

String字元補充

一 string字串補充 對於string 獲取 length chatat indexof 有三種 lastdexof 判斷 contains isempty startwith endwith equals equalsignore 替換 replace 轉換 trim touppercase ...