題解 P2375 NOI2014 動物園

2022-03-06 22:23:35 字數 522 閱讀 8897

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 點的...