前言

来点不带脑子的做法,但有点卡常,在 COCI 的土豆评测机上过不去。

思路

不妨设 n≤mn\leq m,且下文的所有下标均从 00 开始。

看见异或还要求和可以先拆位。

拆位后考虑对于每个 aia_i 求出其贡献,设 fi,jf_{i,j} 为第 ii 个数在第 jj 次出现时会与谁异或,则有 fi,j=(fi,j−1+n)mod  mf_{i,j}=(f_{i,j-1}+n)\mod m,初始状态为 fi,0=if_{i,0}=i。看到这种东西可以直接倍增,设 sumi,jsum_{i,j} 代表 aia_i 第 jj 次出现时当前位已经累计遇到了多少个 11(那么 00 的个数就是 2j2^j 减去 11 的个数),则有 sumi,j=sumi,j−1+sumfi,j−1,j−1sum_{i,j}=sum_{i,j-1}+sum_{f_{i,j-1},j-1}。

于是对于 aia_i,其在最终序列中的出现次数为 ⌊kn⌋+[i<(kmod  n)]\lfloor\frac{k}{n}\rfloor+[i< (k\mod n)],倍增算完 sumsum 数组后直接统计即可,复杂度是 O(nlog⁡2V)\mathcal{O}(n\log^2 V)。

时限不怎么宽裕,但在 lg 评测机上压力不大。