由於字串是aabb的形式,列舉aa和bb中間的位置,分別考慮aa和bb的數量,乘起來sigma一下即為答案
以下考慮aa的情況(bb同理),列舉a的長度,然後按照這個長度分為若干塊,那麼每乙個a一定可以表示成某一段的結尾+下一段的開頭,同時兩個a又要連續,也就是相鄰兩塊的lcp和lcs,用差分來維護即可
1 #include2view codeusing
namespace
std;
3#define n 30005
4#define mod 998244353
5#define mid (l+r+1>>1)
6int
t,n,sum[n],mi[n],f1[n],f2[n];
7long
long
ans;
8char
s[n];
9int hash(int x,int
y)14
bool pd(int x1,int y1,int x2,int
y2)17
void calc(int x,int
y)34
intmain()
53 printf("
%lld\n
",ans);54}
55 }
bzoj 4650 優秀的拆分
先給大家安利乙個80分 小學生都會寫的 版本 分析 複雜度o n 3 在洛谷上測一下可以過80分 特判懶得寫,加上就90了 g i j 表示i到j之間能否構成 aa 的形式,暴力就可以出來 然後枚舉子序列長度,起點位置,以及斷點位置與起點的長度,就能找出 aabb 中a與b接壤的位置,然後左邊右邊都...
bzoj 4650 Noi2016 優秀的拆分
原來只會兩個log平衡樹合併。後來圍觀claris在uoj群上秒題後會了這道題。列舉a b 的長度l,然後列舉i kl,考慮字首i,i l和字尾i 1,i l 1,求出字首的lcp和字尾的lcp,然後合法的方案就在乙個方案內。差分一下即可。注意要避免重複。ac 如下 include include ...
BZOJ 4650 Noi2016 優秀的拆分
題解 求解每個位置向左向右aa串的個數f x g x 列舉a的長度,每a個位置設乙個關鍵點 每乙個a一定僅且跨越乙個關鍵點 然後求出相鄰關鍵點向前向後的最長公共字首的長度,這會對一段區間的f,g產生影響 用差分 字首和統計答案 include include include includeusing...