近期总结 2023.10.6
想摆烂拦不住的
ARC156D Xor Sum 5
题意:给出 \(n,k,a_{1...n}\),求对于所有可能值域为 \([1,n]\)、长度为 \(k\) 的序列 \(p\),\(\sum a_{p_i}\) 的异或和。
\(1\le n,a_i\le 1000,\space 1\le k\le 10^{12}\)
异或和是一个非常特殊的东西,考虑到 \(p\) 是有顺序的,一些相同的贡献会抵消掉。设 \(b_i\) 表示 \(p\) 序列中 \(i\) 的个数,则 \(\sum a_{p_i}=\sum_{i=1}^n b_i\times a_i\),可能的序列个数为 \(b\) 的多重集排列数,即 \(\frac {k!}{b_1!b_2!...b_n!}\),写成组合数的形式 \({b_1 \choose b_1} {b_1+b_2 \choose b_2} {b_1+b_2+b_3 \choose b_3} ... {k \choose b_n}\)
由于是异或和,贡献系数只能为 \(0/1\),所以系数为 \({b_1 \choose b_1} {b_1+b_2 \choose b_2} {b_1+b_2+b_3 \choose b_3} ... {k \choose b_n} \bmod 2\)。注意到这是一个经典套路,在这个式子上运用扩展 \(\text{Lucas}\) 逆定理(\({n \choose m}\bmod 2=1\) 的充要条件是 \(n\) 在二进制下是 \(m\) 的子集),只有在二进制下,\(b_1\) 是 \(b_1\) 子集、\(b_2\) 是 \(b_1+b_2\) 子集、\(b_3\) 是 \(b_1+b_2+b_3\) 子集……对答案才有贡献。
进一步推出,\(b_1,b_2,...,b_n\) 在二进制下互不相交。
于是 \(k\) 的每一位 \(1\) 只能分配给 \(b_1,b_2,...,b_n\) 中的一个,注意 \(a_i\) 很小,考虑 \(\text{DP}\) 处理。设 \(f[i,j]\) 表示分配完 \(k\) 的前 \(i\) 位后,\(\sum_{x=1}^n b_x\times a_x\) 在第 \(i\) 位及之后拼出来的数为 \(j\),此时的贡献系数。
考虑枚举答案的每一位,然后随便处理一下即可,时间复杂度 \(O(n\cdot a_i\log k)\)。
AGC006C Rabbit Exercise
题意:\(n\) 只兔子在数轴上,初始坐标为 \(x_{1...n}\)。一轮跳跃由 \(m\) 次组成,第 \(i\) 次时第 \(a_i\) 个兔子会等概率选择第 \(a_i-1\) 或 \(a_i+1\) 只兔子为镜像进行对称跳跃,跳跃后编号不变。跳跃进行 \(k\) 轮,求最终每只兔子的期望坐标。
\(1\le n,m\le 10^5,\space 1\le k\le 10^{18},\space |x_i|\le 10^9,\space 2\le a_i\le n-1\)
考虑第 \(i\) 轮跳跃,令 \(p=a_i\),设跳跃前 \(p-1,p,p+1\) 兔子的期望坐标为 \(E(p-1),E(p),E(p+1)\)。
那么跳跃后 \(p\) 兔子的期望坐标为 \(E'(p)=\frac 21(2E(p-1)-E(p))+\frac 21(2E(p+1)-E(p))=E(p-1)+E(p+1)-E(p)\)。
直接做不可能。考虑 \(E'(p)=E(p-1)+E(p+1)-E(p)\) 这个东西有什么特点。
发现 \(E'(p)-E(p-1)=E(p+1)-E(p),\space E(p+1)-E'(p)=E(p)-E(p-1)\),也就是这次跳跃交换了 \(p\) 和 \(p+1\) 的差分!设 \(D(i)=E(i)-E(i-1)\),相当于交换了 \(D(p),D(p+1)\) 的值。
我们直接在原来的差分数组上搞,设 \(f_i\) 为一轮跳跃后差分数组的第 \(i\) 个位置的值由原来第 \(f_i\) 个位置的值映射过来。
然后把这个 \(f\) 置换 \(k\) 次,用快速幂即可,时间复杂度 \(O(m+n\log k)\)。
CF840C On the Bench
题意:给出 \(n,a_{1...n}\),将 \(a\) 任意排列,但是排列后相邻两个数的乘积不能是完全平方数,求方案数。
\(1\le n\le 300,\space 1\le a_i\le10^9\)
不难想到连边,对于 \(i,j\),若 \(a_i\times a_j\) 为完全平方数,在 \(a_i,a_j\) 之间连一条无向边。容易发现,若 \(i,j\) 连边,\(j,k\) 连边,那么 \(i,k\) 一定有边。设 \(a_i\times a_j=p^2,a_j\times a_k=q^2\),则 \(a_i\times a_k=\frac{(a_i\times a_j)\times(a_j\times a_k)}{a_j^2}=\frac{p^2q^2}{a_j^2}=(\frac{pq}{a_j})^2\)。于是,图由若干个团组成。
一个团内的点排列后不能相邻,可以把一个团看作一种颜色,那么 \(1...n\) 每个下标都所属一种颜色,相同颜色不能相邻。
考虑套路 \(\text{DP}\),设 \(f[i,j]\) 表示排列了前 \(i\) 种颜色,其中相同颜色相邻的有 \(j\) 处的方案数。
考虑 \(f[i,j]\) 对下一个阶段的贡献,用 \(c_i,s_i\) 表示第 \(i\) 种颜色的下标个数以及前 \(i\) 种颜色的下标个数,枚举 \(i+1\) 颜色分成了 \(k\) 个连续段插入到序列中,以及插入到 \(x\) 个原来的 \(j\) 个缝隙,则