LOJ 103 子串查詢 Hash

2022-05-31 01:36:07 字數 713 閱讀 8534

給定兩個字串 \(a\) 和 \(b\),求 \(b\) 在 \(a\) 中的出現次數。

這是一道 \(kmp\) 的模板題。

不過 \(hash\) 是個好東西,可以用 \(hash\) 代替 \(kmp\) 演算法。

預處理兩個字串的雜湊值,然後將 \(a\) 中所有長度為 \(len(b)\) 的子串的雜湊值與 \(b\) 的雜湊值比較即可。

時間複雜度 \(o(n + m)\),與 \(kmp\) 演算法一樣!

缺點就是常數略大,而且不能用 \(kmp\) 的 \(next\) 陣列。

#include using namespace std;

typedef unsigned long long ull;

const int maxn = 1e6 + 10;

const int base = 131;

ull h1[maxn], h2;

ull p[maxn];

int main()

for(int i = 0; i < s2.size(); ++i)

int ans = 0;

for(int i = s2.size(); i <= s1.size(); ++i)

}cout << ans << endl;

return 0;

}

loj 103子串查詢——用hash代替kmp演算法

103 子串查詢

記憶體限制 256 mib時間限制 500 ms標準輸入輸出 題目型別 傳統評測方式 文字比較 上傳者 匿名 提交提交記錄 統計討論 測試資料 題目描述 這是一道模板題。給定乙個字串 a aa 和乙個字串 b bb,求 b bb 在 a aa 中的出現次數。a aa 中不同位置出現的 b bb 可重...

8 21 問題 F 103 子串查詢

題目描述 這是一道模板題。給定乙個字串 a和乙個字串 b,求 b 在 a 中的出現次數。a中不同位置出現的 b 可重疊。輸入 輸入共兩行,分別是字串 a 和字串 b。輸出 輸出乙個整數,表示 b 在 a 中的出現次數。樣例輸入 zyzyzyz zyz樣例輸出3 提示 1 a,b 的長度 106 a ...

hash 詢問等價子串

給出乙個長度為 n 的字串,有 m 個詢問,每次詢問這個字串中的兩個子串是否等價。資料範圍 n,m leq200000 從是否存在一種字元的對應關係入手。對於每個串,把每個字母是否在這一位上記為 0 或 1 形成乙個 01 串,26 個字母共有 26 個字串。對於兩串的某兩個字母,如果它們的 01 ...