bzoj
神tm閱讀理解題
看完題目之後
想暴力:
搞個倍增陣列來跳ne
xt每次暴跳ne
xt複雜度o(
tnlo
gn)
算一下,感覺複雜度差不多呀
很果斷的交了一發
然後80
分。。。
暴力**送上:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define mod 1000000007
char s[1200000];
int nt[1200000];
int jp[1200000][21];
int main()
for(int j=1;j<20;++j)
for(int i=1;i<=l;++i)
jp[i][j]=jp[jp[i][j-1]][j-1];
int ans=1;
for(int i=2;i<=l;++i)
printf("%d\n",ans);
}return
0;}
然後我很不爽
把倍增陣列的兩維反了過來,防止反覆橫跳
然後我就ac
了???
又一次感受到玄學強大的力量 這個
o(tn
logn
) 的複雜度果然很對呀。。。
暴力能ac???:
(bzoj上都能ac???)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define mod 1000000007
char s[1200000];
int nt[1200000];
int jp[21][1200000];
int main()
for(int j=1;j<20;++j)
for(int i=1;i<=l;++i)
jp[j][i]=jp[j-1][jp[j-1][i]];
int ans=1;
for(int i=2;i<=l;++i)
printf("%d\n",ans);
}return
0;}
經歷了這麼滑稽的事情
還是想想有沒有更加好的複雜度。。。
考慮記錄乙個陣列cn
t[i]
表示從i 位置最多能夠往前跳的次數
很明顯的,cn
t[i]
=cnt
[nex
t[i]
]+1
現在,我們只需要知道每乙個位置能夠跳到**就行了
還是最簡單的暴力
每次從當前位置
i 開始,暴力向前跳到k直到
k∗2<
i 為止,然後答案累乘cn
t[k]
+1看起來每次暴跳的時間複雜度不太能夠接受
最壞可以打到o(
n2)
但是考慮ne
xt陣列是怎麼求出來的
每次沿著前乙個字元的ne
xt跳
直到找到乙個合法的位置
因此,我們模仿這個過程
假設上乙個字元跳到了k
那麼,當前位置最多跳到k+
1 很容易證明
假設當前位置跳到了乙個合法的位置k′
那麼,當前位置的前乙個位置,必定可以跳到乙個合法位置k′
−1
所以,我們只需要類似km
p ,每次利用上一次求出來的
k 接著跳就行了
這樣的時間複雜度近似o(
n)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define rg register
#define mod 1000000007
char s[1200000];
int nt[1200000];
int cnt[1200000];
int main()
cnt[1]=1;
rg int ans=1;
for(rg int i=2;i<=l;++i)cnt[i]=cnt[nt[i]]+1;
for(rg int i=2,k=0;i<=l;++i)
printf("%d\n",ans);
}return
0;}
BZOJ3670 動物園 擴充套件KMP
先用擴充套件kmp求出si n si.n 與s s 的lcpne xti role presentation style position relative nex tine xti。考慮每個字尾si n si.n 的所有字首si k si.k 對numk n um k的貢獻,有貢獻的 k k 顯然...
BZOJ3670動物園 KMP變形
description 近日,園長發現動物園中好吃懶做的動物越來越多了。例如企鵝,只會賣萌向遊客要吃的。為了整治動物園的不良風氣,讓動物們憑自己的真才實學向遊客要吃的,園長決定開設演算法班,讓動物們學習演算法。某天,園長給動物們講解kmp演算法。園長 對於乙個字串s,它的長度為l。我們可以在o l ...
洛谷2375 BZOJ 3670動物園題解
題目鏈結 洛谷鏈結 我們發現題目要我們求的num i 東西本質上其實是 求有多少以i結尾的非字首且能與字首匹配的字串,而且要求字串長度小於 i 2 我們先不考慮字串長度的限制,看所有以i結尾的非字首且能與字首匹配的字串如何計數 考慮到kmp演算法的next陣列求解的過程,大家應該都想到i結尾的非字首...