GDUT 2020 ACM 月赛2 E

题意

给定一个长度为 n n n 01 01 01 s s s(下标从1开始),定义 f ( l , r ) f(l,r) f(l,r)为串 s l s l + 1 … s r − 1 s r s_ls_{l+1}\dots s_{r-1}s_r slsl+1sr1sr的子串中,满足1的个数为奇数的串的个数。求 ∑ i = 1 n ∑ j = i n f ( i , j ) \sum\limits_{i=1}^n\sum\limits_{j=i}^nf(i,j) i=1nj=inf(i,j)

思路

先考虑 f ( 1 , n ) f(1,n) f(1,n)如何求。令 t i = s 1   x o r   s 2 … s i t_i=s_1\ xor\ s_2\dots s_i ti=s1 xor s2si。( s i s_i si是指字符 s i s_i si对应数字, t i t_i ti同样,以下亦是如此)特别地令 t 0 = 0 t_0=0 t0=0。则 f ( 1 , n ) f(1,n) f(1,n)变为找满足 t i ≠ t j ( 0 ≤ i < j ≤ n ) t_i\neq t_j(0 \leq i < j \leq n) ti=tj(0i<jn)的二元组 ( i , j ) (i,j) (i,j)个数, t i ≠ t j t_i\neq t_j ti=tj等价与 t i = t j   x o r   1 t_i=t_j\ xor\ 1 ti=tj xor 1
易得递推关系
f ( 1 , n + 1 ) = f ( 1 , n ) + ∑ j = 0 n [ t j = t n + 1   x o r   1 ] f(1,n+1)=f(1,n)+\sum\limits_{j=0}^n[t_j=t_{n+1}\ xor\ 1] f(1,n+1)=f(1,n)+j=0n[tj=tn+1 xor 1];
p r e ( n , n u m ) = ∑ i = 0 n [ t i = n u m ] pre(n,num)=\sum\limits_{i=0}^n[t_i=num] pre(n,num)=i=0n[ti=num],特别地 p r e ( − 1 , 0 ) = p r e ( − 1 , 1 ) = 0 pre(-1,0)=pre(-1,1)=0 pre(1,0)=pre(1,1)=0;
f ( 1 , n + 1 ) = f ( 1 , n ) + p r e ( n , t n + 1   x o r   1 ) f(1,n+1)=f(1,n)+pre(n,t_{n+1}\ xor\ 1) f(1,n+1)=f(1,n)+pre(n,tn+1 xor 1);
推广到一般情况
f ( l , r + 1 ) = f ( l , r ) + ∑ i = l − 1 r [ t i = t r + 1   x o r   1 ] = f ( l , r ) + p r e ( r , t r + 1   x o r   1 ) − p r e ( l − 2 , t r + 1   x o r   1 ) \begin{aligned} f(l,r+1)&=f(l,r)+\sum\limits_{i=l-1}^r[t_i=t_{r+1}\ xor\ 1] \\ &= f(l,r)+pre(r,t_{r+1}\ xor\ 1)-pre(l-2,t_{r+1}\ xor\ 1) \end{aligned} f(l,r+1)=f(l,r)+i=l1r[ti=tr+1 xor 1]=f(l,r)+pre(r,tr+1 xor 1)pre(l2,tr+1 xor 1)

g n = ∑ i = 1 n f ( i , n ) g_n=\sum\limits_{i=1}^nf(i,n) gn=i=1nf(i,n)
根据 f ( l , r ) f(l,r) f(l,r)递推关系可得
g n + 1 = ∑ i = 1 n + 1 f ( i , n + 1 ) = ∑ i = 1 n ( f ( i , n ) + p r e ( n , t n + 1   x o r   1 ) − p r e ( i − 2 , t n + 1   x o r   1 ) ) + t r + 1 = g n + n ∗ p r e ( n , t n + 1   x o r   1 ) − ∑ i = − 1 n − 2 p r e ( i , t n + 1   x o r   1 ) + t r + 1 \begin{aligned} g_{n+1}&=\sum\limits_{i=1}^{n+1}f(i,n+1) \\ &=\sum\limits_{i=1}^{n}(f(i,n)+pre(n,t_{n+1}\ xor\ 1)-pre(i-2,t_{n+1}\ xor\ 1))+t_{r+1}\\ &=g_{n}+n*pre(n,t_{n+1}\ xor\ 1)-\sum\limits_{i=-1}^{n-2}pre(i,t_{n+1}\ xor\ 1)+t_{r+1} \end{aligned} gn+1=i=1n+1f(i,n+1)=i=1n(f(i,n)+pre(n,tn+1 xor 1)pre(i2,tn+1 xor 1))+tr+1=gn+npre(n,tn+1 xor 1)i=1n2pre(i,tn+1 xor 1)+tr+1
由于 p r e ( − 1 , 0 ) = p r e ( − 1 , 1 ) = 0 pre(-1,0)=pre(-1,1)=0 pre(1,0)=pre(1,1)=0,所以
g n + 1 = g n + n ∗ p r e ( n , t n + 1   x o r   1 ) − ∑ i = 0 n − 2 p r e ( i , t n + 1   x o r   1 ) + t n + 1 g_{n+1}=g_{n}+n*pre(n,t_{n+1}\ xor\ 1)-\sum\limits_{i=0}^{n-2}pre(i,t_{n+1}\ xor\ 1)+t_{n+1} gn+1=gn+npre(n,tn+1 xor 1)i=0n2pre(i,tn+1 xor 1)+tn+1
p p r e ( n , n u m ) = ∑ i = 0 n p r e ( i , n u m ) ppre(n,num)=\sum\limits_{i=0}^{n}pre(i,num) ppre(n,num)=i=0npre(i,num)
g n + 1 = g n + n ∗ p r e ( n , t n + 1   x o r   1 ) − p p r e ( n − 2 , t n + 1   x o r   1 ) + t n + 1 g_{n+1}=g_n+n*pre(n,t_{n+1}\ xor\ 1)-ppre(n-2,t_{n+1}\ xor\ 1)+t_{n+1} gn+1=gn+npre(n,tn+1 xor 1)ppre(n2,tn+1 xor 1)+tn+1;

p r e ( n + 1 , n u m ) = p r e ( n , n u m ) + [ t n + 1 = n u m ] pre(n+1,num)=pre(n,num)+[t_{n+1}=num] pre(n+1,num)=pre(n,num)+[tn+1=num];
p p r e ( n + 1 , n u m ) = p p r e ( n , n u m ) + p r e ( n + 1 , n u m ) ppre(n+1,num)=ppre(n,num)+pre(n+1,num) ppre(n+1,num)=ppre(n,num)+pre(n+1,num);
可以 O ( n ) O(n) O(n)递推得到 p r e , p p r e , g pre,ppre,g pre,ppre,g
最后 a n s = ∑ i = 1 n g i ans=\sum\limits_{i=1}^ng_i ans=i=1ngi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值