time limit: 10 sec memory limit: 128 mb
submit: 376 solved: 75
[submit][status][web board]
很久很久以前,森林裡住著一群兔子。
有一天,兔子們想要研究自己的dna序列。
我們首先選取乙個好長好長的dna序列(小兔子是外星生物,dna序列可能包含26個小寫英文本母)。
然後我們每次選擇兩個區間,詢問如果用兩個區間裡的dna序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。
注意兩個兔子一模一樣只可能是他們的dna序列一模一樣。
第一行輸入乙個dna字串s。
第二行乙個數字m,表示m次詢問。
接下來m行,每行四個數字l1,r1,l2,r2,分別表示此次詢問的兩個區間,注意字串的位置從1開始編號。
資料範圍
1≤length(s),m≤1000000
對於每次詢問,輸出一行表示結果。
如果兩隻兔子完全相同輸出yes,否則輸出no(注意大小寫)。
aabbaabb
31 3 5 7
1 3 6 8
1 2 1 2
yes
noyes
[submit][status]
雙hash+快讀,雙hash是預防精心構造的資料的。
**:
#include
using
namespace std;
int mod1=
998244
,base1=
233,n,t,ll=1;
char s[
1000001];
int mod2=
666623
,base2=
431;
long
long h2[
1000001
],p2[
1000001
],h1[
1000001
],p1[
1000001];
void
read
(int
&x)void
build1()
bool
check1
(int l1,
int r1,
int l2,
int r2)
void
build2()
bool
check2
(int l1,
int r1,
int l2,
int r2)
intmain()
return0;
}
兔子與兔子(字串hash)
很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。注意兩個兔...
字串 Hash 兔子與兔子
字串hash可以把乙個長度任意的字串對映成乙個非負整數,並且其衝突概率幾乎為0 取一固定值p,把字串看作p進製數,並分配乙個大於0的值,代表每種字元。一般來說,分配的數都遠小於p。例如 a 1,b 2 z 26 取乙個固定值m,求出該p進製對m的餘數,作為hash值。一般來說,p取131或者1333...
Acwing 138 兔子與兔子 Hash字串
acwing 138.兔子與兔子 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,...