拼湊 牛客練習賽70

2022-05-05 12:39:11 字數 1484 閱讀 3127

牛牛還是很喜歡字串"puleyaknoi"。

牛牛有t個超長超長的字串,不過這次他更懶了,他希望直接在字串中看見他喜歡的字串。

如果乙個子串中含有乙個子串行是」puleyaknoi「,那麼他就把這個子串稱作好的子串。

牛牛是個懶人,他不喜歡看太長的子串,那樣他會覺著眼鏡很累。

你能幫他求出對於每個字串,最短的好的子串的長度是多少嗎?

如果沒有,請輸出-1。

輸入描述:

第一行乙個t表示資料組數

接下來t行每行乙個字串(保證字串只含小寫字母)

輸出描述:

共t行每行乙個答案

示例1輸入

複製

3

sxpuleyaaknoip

pionkaayelupxs

yydspwuwlwewywawkwnwowiw

輸出

複製

11-1

19

備註:

t<=10,字串長度不超過10^5t≤10,字串長度不超過10

5我一開始想的是在a題的基礎上改,a題是打亂順序,b題是找子串,子串其實就是相對位置已經固定,只是不一定靠著而已

我用a題作為模板改完後,意識到複雜度過高,肯定會tel,決定換乙個方式

用序列自動機來做,序列自動機專門來求子串問題,典型的空間換時間,

記錄每個位置往後最近的字母的位置

然後從p才是出發匹配我們所需要的子串

int nxt[maxn][30

];int now[30]

;char s[maxn]

;void

init()

}

查詢時這樣

now = nxt[now][mark[pos++] - 『a』];

從前向後找

#include

const

int inf=

1e8+9;

using

namespace std;

string s=

"puleyaknoi"

;const

int maxn=

1e5+9;

int nxt[

100009][

37];int now[maxn]

;int

main()

int ann=inf;

for(

int i=

0;ilength()

;i++)if

(time!=-1

&&pos==

10)ann=

min(ann,time-i+1)

;}}if

(ann==inf)cout<<-1

}

牛客練習賽 70

二分答案,然後迴圈一邊即可。define io ios sync with stdio false cin.tie cout.tie 0 pragma gcc optimize 2 include include using namespace std const int n 100010 int ...

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...

牛客練習賽15

時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。amy 8.99999999999999999999...