做题记录 26.2.15
\(\textcolor{black}\odot\) AT_abc288_h [ABC288Ex] A Nameless Counting Problem
令 \(g_i\) 表示长度为 \(i\),值域为 \([0,m]\),异或和为 \(x\) 且数字互不相同的序列数量,则答案为
得到 \(g\) 后容易 \(O(n^2)\) 求出答案,因此考虑如何求出 \(g\)
令 \(f_i\) 表示长度为 \(i\),值域为 \([0,m]\),异或和为 \(x\) 的序列数量,容易数位 \(dp\) 做到 \(O(n^3\log V)\)
令 \(od_{i,j},ev_{i,j}\) 表示 \(1\sim i\) 划分为 \(j\) 部分,每部分大小为奇数/偶数的方案数,容易做到 \(O(n^3)\)
则
容易优化到 \(O(n^3)\)
总时间复杂度 \(O(n^3\log V)\)
\(\textcolor{black}\odot\) AT_arc184_e [ARC184E] Accumulating Many Times
同时令 \(A_i\) 每个位置变为其前缀和,改为同时令 \(A_j\) 中每个位置异或上前一个位置,显然不影响答案
显然操作可逆,且每个状态有且仅有一个后继,对于 \(2^m\) 个状态建图,可以得到若干环
取 \(l=2^{1+\lceil\log_2(m)\rceil}\),则环长一定 \(\le l\)
考虑每个环求出一个关键点,并对每个 \(A_i\) 求出它到所属环关键点的距离 \(ds\)
令关键点为环中字典序最小的点,因此转化为对每个 \(A_i\) 求出能得到的字典序最小的状态以及到达此状态的步数
对于一个 \(A_i\),令 \(p\) 为第一个 \(A_{i,p}=1\) 的位置,显然 \(A_{i,1\sim p}\) 经过操作后不变
\(2^l\) 次操作等价于同步令每个 \(A_{i,x}\) 异或上 \(A_{i,x-2^l}\),对操作二进制拆分可以转化为若干次此操作
从前往后贪心,则依次考虑 \(A_{i,p+2^k}\mid k\ge 0\)(其余位置一旦操作则会影响之前的位置,反而字典序更大),若为 \(1\) 则进行 \(2^k\) 次操作
暴力实现此过程,容易做到 \(O(nm\log m)\)
令每个 \(A_i\) 变为其所在环的关键点,依次考虑每个等价类,容易树状数组优化统计答案的过程,做到 \(O(nm\log n)\)
总时间复杂度 \(O(nm\log nm)\)
\(\textcolor{black}\odot\) CF1770F Koxia and Sequence
若 \(a_{1\sim n}\),考虑其全排列,\(1\sim n\) 每个位置的贡献都相同,当 \(n\) 为偶数时贡献相互抵消,当 \(n\) 为奇数时只剩下 \(a_1\) 的贡献
因此 \(n\) 为偶数时答案为 \(0\),否则只需要求所有合法的 \(\{a\}\) 的 \(a_1\) 的异或和即可
答案以异或的方式统计,因此 \(a_1\) 每一位贡献独立,考虑第 \(i\) 位的贡献,转化为求 \(a_1\) 第 \(i\) 位为 \(1\) 的方案数,显然 \(i\in y\)
令 \(f(y)\) 表示 \(\{a\}\) 按位或和为 \(y\) 的子集,\(a_1\) 第 \(i\) 位为 \(1\),\(a\) 总和为 \(x\) 的方案数,则容斥得 \(2^i\) 计入答案的次数为 \(\sum_{y'\subseteq y} (-1)^{|y|-|y'|}f(y')\equiv\bigoplus_{y'\subseteq y} f(y')\pmod 2\),即转化为求 \(f(y')\) 的异或和(注意 \(i\in y'\))
而
可以 \(O(1)\) 计算
总时间复杂度 \(O(y\log y)\)

浙公网安备 33010602011771号