luogu
先用裸的\(kmp\)求出\(fail(next)\)陣列(隨便叫的無所謂啦)和不管重疊時的數量記為\(ans_\),\(ans\)的定義類似於\(fail(next)\),然後再跑一遍,求出\(<=\frac\)的數量,可結合**理解
#includeusing namespace std;
int n,l,fail[1000010],j,ans[1000010];
long long ans,mod=1000000007;
char s[1000010];
int main()
if(s[j+1]==s[i])
else
ans[i]=ans[j]+1;
} j=0;
for(int i=2;i<=l;i++)
j+=(s[j+1]==s[i]);
while(j*2>i)
ans=ans*(ans[j]+1)%mod;
} cout<} }
洛谷 P2375 NOI2014 動物園
其實對於乙個sum i 其值就等於sum next i sum next next i 1,然後我們可以記憶化,然後題目裡又有乙個限制,就是前字尾不能重合,那我們就找到最大但是不重合的那種情況,然後往小了列舉就好了.最後答案說要取模,所以不要忘了 ljx xhy yyq 排名無先後 1 includ...
洛谷P2375 NOI2014 動物園
題目大意 求出乙個字串 s 每一位的 num i 最多 5 組詢問,s leqslant10 6 num i 定義為 s 中長度不超過 lfloor dfrac i2 rfloor 的 border 的個數 題解 類似 kmp 發現乙個字串 border 的 border 一定是原串的 border...
題解 NOI2014購票
我們首先get出斜率優化方程 dp v dis v p u dis u p u q u dp u left 0 dis u dis v lim u right 那麼 y dp v x dis v k p u 我們所要做的就是維護乙個下凸包以維護最小的b值。現在有兩個本題的難點 首先,轉移到 u 點的...