其實對於乙個sum[i],其值就等於sum[next[i]] + sum[next[next[i]]] + ... + 1,然後我們可以記憶化,然後題目裡又有乙個限制,就是前字尾不能重合,那我們就找到最大但是不重合的那種情況,然後往小了列舉就好了.最後答案說要取模,所以不要忘了%%%ljx_xhy_yyq(排名無先後).
1 #include2 #include3 #include4#define ljx_xhy_yyq 100000000756
using
namespace
std;78
int n,sum[1000001],kmp[1000001];9
long
long
ans;
10string
p,l;
1112
intmain()
26 j = 0;27
for(int i = 2;i <= len; i++)
34 printf("
%lld\n
",ans);35}
3637
return0;
38 }
洛谷P2375 NOI2014 動物園
題目大意 求出乙個字串 s 每一位的 num i 最多 5 組詢問,s leqslant10 6 num i 定義為 s 中長度不超過 lfloor dfrac i2 rfloor 的 border 的個數 題解 類似 kmp 發現乙個字串 border 的 border 一定是原串的 border...
題解 P2375 NOI2014 動物園
luogu 先用裸的 kmp 求出 fail next 陣列 隨便叫的無所謂啦 和不管重疊時的數量記為 ans ans 的定義類似於 fail next 然後再跑一遍,求出 frac 的數量,可結合 理解 includeusing namespace std int n,l,fail 1000010...
洛谷P2014 選課
題目描述 在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程...