很久很久以前,森林裡住著一群兔子。
有一天,兔子們想要研究自己的 dna 序列。
我們首先選取乙個好長好長的 dna 序列(小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母)。
然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。
注意兩個兔子一模一樣只可能是他們的 dna 序列一模一樣。
輸入格式
第一行輸入乙個 dna 字串 s。
第二行乙個數字 m,表示 m 次詢問。
接下來 m 行,每行四個數字 l1,r1,l2,r2<?xml:namespace prefix = "[default] " ns = "" />l1,r1,l2,r2,分別表示此次詢問的兩個區間,注意字串的位置從1開始編號。
輸出格式
對於每次詢問,輸出一行表示結果。
如果兩隻兔子完全相同輸出 yes,否則輸出 no(注意大小寫)。
資料範圍
1≤length(s),m≤10000001≤length(s),m≤1000000
輸入樣例:
aabbaabb
31 3 5 7
1 3 6 8
1 2 1 2
輸出樣例:yes
noyes
將字串看成乙個p進製的數,然後用unsigned long long 來儲存,相當於
溢位後自動mod2^64,p一般取131,13331.
此題思路:
將字串的字首轉換為hash值,然後求出p對應得進製數。
假設字串為
abcd
對應的字首hash為
h[1],h[2],h[3],h[4]
如果我們要求,3 - 4這的hash值,就等於 h[4] – h[3 - 1]*131^(4-3+1)
所以可以寫出題解:
#include #include #include usingnamespace std;
using ull = unsigned
long
long;
const
int n = 1e6 + 5;
char s[n];
ull h[n], p[n];
int m, base = 131;
ull get(int l, int r)
int main()
cin >> m;
while(m --)
return 0;
}
雜湊 兔子與兔子
題目描述 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。...
hash 兔子與兔子(C )
time limit 10 sec memory limit 128 mb submit 376 solved 75 submit status web board 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的dna序列。我們首先選取乙個好長好長的dna序列 小兔子是外星生物,dn...
CH 1401兔子與兔子
描述 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。注意...