EOJ 3441 唐納德與子串 Easy

2021-08-13 06:26:58 字數 1521 閱讀 6184

description

submit

statistics

discussion

time limit per test: 1.0 seconds

memory limit: 256 megabytes

子串的定義是在乙個字串中連續出現的一段字元。這裡,我們使用 s[l

…r]  來表示 s

字串從 l

到 r(閉區間)的子串。在本題中,字串下標從 0

開始。顯然,對於長度為 n

的字串共有 n(n

+1)2

個子串。

對於乙個給定的字串 s

,唐納德給出 q

次詢問,第 i

次詢問包括三個引數 li,

ri,z

i ,問在 s[l

i…ri

]  的所有子串中共有多少個恰好為 z

輸入具有如下形式: s

ql1r

1z1l

2r2z

2⋮lq

rqzq

第一行乙個字串 s

。第二行乙個整數 q

。接下來每行:首先兩個整數 li,

ri(0≤l

i≤ri

| ),然後是乙個非空字串 z

i 。整數和整數,整數和字串間以單空格隔開。

字串中只會出現 26

個小寫英文本母。

資料規模約定:

對於每次詢問,輸出乙個整數,表示答案。

input

thisisagarbagecompetitionhahaha

50 30 a

1 5 is

25 30 hah

6 12 ag

7 12 ag

output62

221

分析:kmp的題,知識不是讓你在文字串中匹配模式串,而是讓你擷取文字串中的某一部分對其進行匹配模式串的個數。

練kmp的之後我就在c++的next陣列裡掙扎了好久,沒想到這次又掉進去了,我滴天,套模板的題,早知道我就將next陣列改個名字了。

#include#include#includechar s[1005],h[1005];

int next[1005];

int q,l,r,n;

void get_next()///求得模式串的next陣列

if (h[k + 1] == h[i])

next[i] = k;

}}int kmp()///進行匹配

if (h[k + 1] == s[i])

k = k + 1;

if (k == n-1)

}return sum;

}int main()

return 0;

}

344 反轉字元

看到題目的第一反應,好簡單啊,直接將第乙個與最後乙個對調,第二個與倒數第二個對調不就搞定了?不過這樣時間和空間上複雜度肯定會高一點,結果也不出所料 執行用時 216 ms 在reverse string的python3提交中擊敗了8.11 的使用者 記憶體消耗 17.6 mb 在reverse st...

EOJ 莫干山奇遇

出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...

leetcode演算法題 344

344.編寫乙個函式,其作用是將輸入的列表或字串反轉過來,假設輸入的資料型別是list.示例1 輸入 h e l l o 輸出 o l l e h 分析 之前看過別人用python解這道題,直接return s 1 可以用是可以用,但了解不到這裡的演算法的精髓,有點討巧的意思。這題的使用演算法思路來...