洛谷 P2353 背單詞

2022-04-04 21:28:49 字數 1821 閱讀 5123

小明對英語一竅不通,令老師十分頭疼。於是期末考試前夕,小明被逼著開始背單詞……

老師給了小明一篇長度為n的英語文章,然後讓小明背m個單詞。為了確保小明不會在背單詞時睡著,老師會向他提q個問題,每次老師隨機選擇乙個區間l..r,小明要回答在這段文字中他背過的單詞總共出現過多少次。

輸入格式:

第一行兩個整數m、q如前所述。第二行為英語文章。接下來m行每行乙個需要背的單詞。接下來q行每行乙個詢問,包含兩個整數l、r(含端點),即給定的文字區間。

輸出格式:

q行,對每個詢問輸出一行表示答案。

輸入樣例#1:

3 3

abcabcbc

abcbc

a1 3

6 71 8

輸出樣例#1:

3

07

資料範圍:

對於30%的資料,1<=n<=10^3,1<=q<=10^3

對於60%的資料,1<=n<=10^5,1<=q<=10^5

對於100%的資料,1<=n<=10^6,1<=m<=10,1<=q<=10^6,1<=每個單詞的長度<=n,1<=l<=r<=n

正解 m次kmp 統計字首和。

不知為什麼的錯解:ac自動機,卡了90分鐘 。不明白為什麼,感覺挺對,也可能是我寫得醜。

每次詢問取出x~y的子串 跑ac自動機,路過大神幫忙看一下。。(明知不會有大神路過,卻依舊恬不知恥)..

屠龍寶刀點選就送

#include #include 

const

int n = 1e6+5

;int que[n],num[n],cnt[n],trie[n][26],fail[n],n,q,siz=1

;char

text[n],a[n];

inline

void ins(int

k) cnt[p]++;

num[p]=k;

}inline

void read(int &x)

void

build()

if(!tmp) fail[trie[now][i]]=1

; }

que[++r]=trie[now][i]; }}

}}int query(int l,int

r)

return

ans;

}int

main()

build();

for(int x,y;q--;)

return0;

}

求說為什麼錯的ac自動機

#include #include 

#include

const

int n = 1e6+5

;inline

void read(int &x)

int len,n,q,los[n],next[n],sum[n][15

];char

text[n],word[n];

void kmp(int k,int

l) i=0,j=0

;

for(;il;)

}int

main()

for(int i=1;i<=len;++i)

for(int j=1;j<=n;++j)

sum[i][j]+=sum[i-1

][j];

for(int x,y,ans;q--;)

printf(

"%d\n

",ans);

}return0;

}

洛谷P3294 SCOI2016 背單詞 題解

題目傳送 閱讀理解題題意解釋可以看這位大佬的部落格。發現求字尾與倒序求字首是等價的,而找字首自然就想到了trie樹。將所有字串翻轉後再建入trie樹中,再對每乙個字串翻轉後從trie樹中找字首,就能找到乙個字串的所有字尾了。由第三種情況知我們要想最小化總代價,則最小化乙個字串與最靠近它的字尾間的距離...

洛谷 P1666 字首單詞

首先空集合也是答案,所以樣例是對的 那麼我們思考 假如兩個串ab a b 如果這個時候a不是b的字首 那麼所有字典序小於a的並且不是a的字首的字串均不是b的字首 所以我們先對串排序,然後直接dp f i j 表示1 j號串裡取i個 j號必須取 的所喲方案數 f 0 0 0 include defin...

洛谷p1019 單詞接龍

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...