「madoka,不要相信 qb!」伴隨著 homura 的失望地喊叫,madoka 與 qb 簽訂了契約.
這是 modoka 的乙個噩夢,也同時是上個輪迴中所發生的事.為了使這一次 madoka 不再與 qb簽訂契約,homura 決定在剛到學校的第一天就解決 qb.然而,qb 也是有許多替身的(但在第八話中的劇情顯示它也有可能是無限重生的),不過,意志堅定的 homura 是不會放棄的——她決定
消滅所有可能是 qb 的東西.現在,她已感受到附近的狀態,並且把它轉化為乙個長度為 n 的字串交給了學 oi 的你.
現在你從她的話中知道 , 所有形似於 a+b+a 的字串都是 qb 或它的替身 , 且len(a)>=k,len(b)>=1 (位置不同其他性質相同的子串算不同子串,位置相同但拆分不同的子串算同一子串),然後你必須盡快告訴 homura 這個答案——qb 以及它的替身的數量.
第一行乙個字串,第二行乙個數 k
僅一行乙個數 ans,表示 qb 以及它的替身的數量
【樣例輸入 1】
aaaaa
1【樣例輸入 2】
abcabcabc
2【樣例輸出 1】
6【樣例輸出 2】
8對於 100%的資料:n<=15000 , k<=100,且字符集為所有小寫字母
題解:15000跑n^2的題真是少見了。
由於每個子串都是某個字尾的字首,所以我們列舉每個字尾,然後我們要求就是:每個字首的最長字首字尾,且滿足該字首和字尾不能挨上。是不是想到了動物園那題?
其實思想非常簡單,先求next陣列,然後用val[i]表示字首i的滿足要求的最長字首字尾。求val的過程和next類似,只需要在判相等時再判一下長度限制即可。最終統計的就是val[i]>=k的個數。
#include #include #include using namespace std;const int maxn=100010;
int n,m,ans;
char str[maxn];
int next[maxn],val[maxn];
int main()
printf("%d",ans);
return 0;
}
bzoj3620 似乎在夢中見過的樣子
亂點點到了這題。然後fyc巨巨說他以前用的是exkmp。於是我就學稍微學了一下。然後學著學著感覺沒什麼用 然後就放棄了。發現這題大家都是暴力 kmp 其實真的很暴力 你就列舉乙個左端點。然後對於這個左端點,我們對後面的字串跑一次kmp 然後呢,再列舉乙個右端點,判斷行不行。其實呢就還是按kmp的ne...
BZOJ3620 似乎在夢中見過的樣子
time limit 15 sec memory limit 128 mb submit 1361 solved 796 madoka,不要相信 qb!伴隨著 homura 的失望地喊叫,madoka 與 qb 簽訂了契約.這是 modoka 的乙個噩夢,也同時是上個輪迴中所發生的事.為了使這一次 ...
bzoj3620似乎在夢中見過的樣子
bzoj3620似乎在夢中見過的樣子 題意 給出乙個字串,要求求出形如a b a的子串數量,且lena k,lenb 1。字串長度 15000,k 100,所以字元長度為小寫字母。題解 第一次寫kmp的題qaq 這題利用的是fail函式的性質 若字串s在位置x的fail函式f x 不為0,則pref...