牛牛還是很喜歡字串"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...