ARC184E Accumulating Many Times 做题记录

对于一个长 mm0101 序列 a[1,m]a_{[1,m]},定义变换 ff

  • f(a)i=(jiaj) mod 2f(a)_i=\left(\sum\limits_{j\le i}a_j\right)\text{ mod 2}

也就是做一次异或意义下的前缀和。

对于两个长 mm 的序列 a,ba,b,定义 g(a,b)g(a,b) 为:

  • 至少对 aa 做多少次变换 ff 才能令 i,ai=bi\forall i,a_i=b_i,如果无论做多少次变换都不可能,那么 g(a,b)g(a,b)00

现在给定 nn 个长 mm 的序列 a[1,n]a_{[1,n]},求 i<jg(ai,aj)\sum\limits_{i<j}g(a_i,a_j),对 998244353998244353 取模。

1n×m1061\le n\times m\le 10^6ai,j{0,1}a_{i,j}\in \{0,1\}

对于一个序列 aa,若其首位非 11 则可以将首位删去,故下文默认 a1=1a_{1}=1

不难发现,做 kk 次前缀和后 aia_iaja_j 的贡献是 (kji) mod 2\binom{k}{j-i}\text{ mod }2。而根据 Lucas 定理,这个东西等于 [jik][j-i\subseteq k]

aa 的最小正周期 TT 为最小的 a\ge |a|2x2^x

对于两个序列 a,ba,b,考虑如何判断 aa 能否到达 bb。这类问题可以考虑代表元,只需找到 aabb 各自所在的环上的字典序最小的序列 amin,bmina_{\min},b_{\min} 并判断它们是否相等就行了。进一步,由于显然 a=b|a|=|b|,那么它们的周期 TT 相等,只需找出 aamina\to a_{\min}bbminb\to b_{\min} 的步数 ta,tbta,tb,则:

g(a,b)={tatbtatbTta+tbta>tbg(a,b)= \begin{cases} ta-tb & ta\le tb\\ T-ta+tb & ta>tb \end{cases}

那么对于每个序列 aia_i 求出 amina_{\min}TTtaita_i 后可以用树状数组简单计算答案。

现在来考虑 amina_{\min} 怎么求。根据 Lucas 定理,可以发现做 2k2^k 次前缀和其实相当于做一次隔 2k2^k 位的前缀和,即 aia_i 贡献到 ai+2ka_{i+2^k}

那么考虑从低往高确定 taita_i 二进制的每一位,假设考虑到 [2k]tai[2^k]ta_i,则对于 a1+2ka_{1+2^k}

  • >k>k 的那些位影响不到它;
  • <k<k 的那些位对它的贡献已经确定了,假设影响为 uu

那么由于要最小化字典序,故可以确定 [2k]tai=a1+2ku1[2^k]ta_i=a_{1+2^k}\oplus u\oplus 1

故这样扫一遍就可以确定 taita_i,从而确定 amina_{\min}

之后的部分都是简单的,时间复杂度 O(nmlogn)O(nm\log n)