字串雜湊(模板)

2021-09-26 02:59:09 字數 1081 閱讀 6255

尋找長度為n的主串s中的匹配串t(長度為m)出現的位置或次數屬於字串匹配問題。

字串雜湊就是將每個字串轉化為乙個數值,然後遍歷主串,判斷在主串起始位置為i長度為m的字串的雜湊值與匹配串的雜湊值是否相等即可,每次判斷為o(1)的時間。這樣就可以轉化為o(n)的時間完成判斷。若求字串中第i位到第j位的雜湊值(i很久很久以前,森林裡住著一群兔子。

有一天,兔子們想要研究自己的 dna 序列。

我們首先選取乙個好長好長的 dna 序列(小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母)。

然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。

注意兩個兔子一模一樣只可能是他們的 dna 序列一模一樣。

第一行輸入乙個 dna 字串 s。

第二行乙個數字 m,表示 m 次詢問。

接下來 m 行,每行四個數字 l1,r1,l2,r2,分別表示此次詢問的兩個區間,注意字串的位置從1開始編號。

對於每次詢問,輸出一行表示結果。

如果兩隻兔子完全相同輸出 yes,否則輸出 no(注意大小寫)。

資料範圍

1≤length(s),m≤1000000

aabbaabb

31 3 5 7

1 3 6 8

1 2 1 2

yes

noyes

#include#include#define ull unsigned long long

using namespace std;

const int maxn=1e6+10;

ull p[maxn],hsh[maxn];

char s[maxn];

int gethash(int l,int r)

int main()

int m;

cin>>m;

while(m--)

return 0;

}

在計算時可以使用無符號型別的自然溢位,省去%mod。unsigned long long是對64取餘。

字串雜湊 模板

以下文字 據我的理解,hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。字串hash的種類還是有很多種...

模板 字串雜湊

如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母,大小寫敏感 請求出n個字串中共有多少個不同的字串。第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出包含一行,包含乙個整數,為不同的字串個數。s am plei nput sample input...

模板 字串雜湊

字串雜湊,說白了就是乙個函式,你把乙個字串輸入進去處理,輸出乙個更容易儲存或者比較的東西,相當於乙個加密的過程。但是對於同乙個加密方法,可能會有不同字串得到同樣的結果的情況,所以我們要做的就是讓字串的雜湊值盡量不相等。一般我們現在接觸到的字串雜湊,基本思想就是把它的每一位轉化成乙個特殊進製數的乙個數...