前言

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

思路

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

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

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

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

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