题意
给定一个长度为nnn的010101串sss(下标从1开始),定义f(l,r)f(l,r)f(l,r)为串slsl+1…sr−1srs_ls_{l+1}\dots s_{r-1}s_rslsl+1…sr−1sr的子串中,满足1的个数为奇数的串的个数。求∑i=1n∑j=inf(i,j)\sum\limits_{i=1}^n\sum\limits_{j=i}^nf(i,j)i=1∑nj=i∑nf(i,j)。
思路
先考虑f(1,n)f(1,n)f(1,n)如何求。令ti=s1 xor s2…sit_i=s_1\ xor\ s_2\dots s_iti=s1 xor s2…si。(sis_isi是指字符sis_isi对应数字,tit_iti同样,以下亦是如此)特别地令t0=0t_0=0t0=0。则f(1,n)f(1,n)f(1,n)变为找满足ti≠tj(0≤i<j≤n)t_i\neq t_j(0 \leq i < j \leq n)ti=tj(0≤i<j≤n)的二元组(i,j)(i,j)(i,j)个数,ti≠tjt_i\neq t_jti=tj等价与ti=tj xor 1t_i=t_j\ xor\ 1ti=tj xor 1。
易得递推关系
f(1,n+1)=f(1,n)+∑j=0n[tj=tn+1 xor 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=0∑n[tj=tn+1 xor 1];
设pre(n,num)=∑i=0n[ti=num]pre(n,num)=\sum\limits_{i=0}^n[t_i=num]pre(n,num)=i=0∑n[ti=num],特别地pre(−1,0)=pre(−1,1)=0pre(-1,0)=pre(-1,1)=0pre(−1,0)=pre(−1,1)=0;
则f(1,n+1)=f(1,n)+pre(n,tn+1 xor 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−1r[ti=tr+1 xor 1]=f(l,r)+pre(r,tr+1 xor 1)−pre(l−2,tr+1 xor 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=l−1∑r[ti=tr+1 xor 1]=f(l,r)+pre(r,tr+1 xor 1)−pre(l−2,tr+1 xor 1)
设gn=∑i=1nf(i,n)g_n=\sum\limits_{i=1}^nf(i,n)gn=i=1∑nf(i,n)
根据f(l,r)f(l,r)f(l,r)递推关系可得
gn+1=∑i=1n+1f(i,n+1)=∑i=1n(f(i,n)+pre(n,tn+1 xor 1)−pre(i−2,tn+1 xor 1))+tr+1=gn+n∗pre(n,tn+1 xor 1)−∑i=−1n−2pre(i,tn+1 xor 1)+tr+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=1∑n+1f(i,n+1)=i=1∑n(f(i,n)+pre(n,tn+1 xor 1)−pre(i−2,tn+1 xor 1))+tr+1=gn+n∗pre(n,tn+1 xor 1)−i=−1∑n−2pre(i,tn+1 xor 1)+tr+1
由于pre(−1,0)=pre(−1,1)=0pre(-1,0)=pre(-1,1)=0pre(−1,0)=pre(−1,1)=0,所以
gn+1=gn+n∗pre(n,tn+1 xor 1)−∑i=0n−2pre(i,tn+1 xor 1)+tn+1g_{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+n∗pre(n,tn+1 xor 1)−i=0∑n−2pre(i,tn+1 xor 1)+tn+1
设ppre(n,num)=∑i=0npre(i,num)ppre(n,num)=\sum\limits_{i=0}^{n}pre(i,num)ppre(n,num)=i=0∑npre(i,num);
则gn+1=gn+n∗pre(n,tn+1 xor 1)−ppre(n−2,tn+1 xor 1)+tn+1g_{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+n∗pre(n,tn+1 xor 1)−ppre(n−2,tn+1 xor 1)+tn+1;
而
pre(n+1,num)=pre(n,num)+[tn+1=num]pre(n+1,num)=pre(n,num)+[t_{n+1}=num]pre(n+1,num)=pre(n,num)+[tn+1=num];
ppre(n+1,num)=ppre(n,num)+pre(n+1,num)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)递推得到pre,ppre,gpre,ppre,gpre,ppre,g。
最后ans=∑i=1ngians=\sum\limits_{i=1}^ng_ians=i=1∑ngi。