2025.2.9 test

比赛过程是:0:30 秒掉 A,然后在某时刻打 B 的暴力,B 这种不会做,然后在还剩 1:30 的时候看出 C 题大致做法,但是实现不出来。

总结一下就是要加强代码能力,以及补充 T2 这种分治想法的练习,还有 T3 拆绝对值使得每个点独立的想法要早一点看出来。

A

手机图案密码的解锁过程可以简单地看做从矩形点阵中任选一些不同的点并将他们按某种排列顺序顺次连接,你必须保证连续经过的两个点中间连线上的点都已经在之前连接过了。你的要在 \(2\times n\) 的点阵上设置密码,请问有多少种合法的密码。\(n\le 2000\)

假设在一行里走,如果从 \(p_i\) 走到 \(p_{i+1}\) 后把 \(p_i\) 删掉那么相当于每次走相邻的点。
于是有一个 dp 设 \(f_{L,R,pos,0/1}\) 表示两行各有 \(L,R\) 个,当前在哪行的第几个的方案数。复杂度 \(O(n^4)\)
根据常见优化只需要维护 \(s_{L,R,0/1}=\sum_{pos}f_{L,R,pos,0/1}\) 即可。

B

对两个长度 \(3^k\) 的序列做 mex 卷积,定义为三进制下每位都做 mex。 \(k\le 12\)

我很唐氏对于这种题。这种题目叫做分治乘法。
也就是对于最高位取 \(0/1/2\) 分别拿出来形成 \(A,B\) 各三个序列,递归处理剩下的序列,然后决策当前位。
初始的想法是对 \(A_0,A_1,A_2\)\(B_0,B_1,B_2\) 两两匹配递归处理 \((A_i,B_j)\),然后贡献到最高位为 \(mex(i,j)\) 处。
事实上这里可以通过”合并同类项“思想来简化运算。
考虑构造。令 \(r_0=A_2\times B_0,r_1=(A_0+A_2)\times B_0,r_2=(A_1+A_2)\times (B_1+B_2)\)
\(r_3=(A_0+A_1+A_2)\times (B_0+B_1+B_2)\)
那么 \(C_0=r_2,C_1=r_0+r_1,C_2=r_3-r_0-r_1-r_2\)。加减代表每位分别加,乘法就是递归 mex 卷积。
一直递归下去,那么 \(T(n)=4(n/3)+O(n)\),复杂度得 \(O(n^{\log_34})=O(4^k)\)
一开始我误以为要用 FWT 的想法,构造 fwt 数组,但是这是做不了的。
其实这个做法跟 FWT 没什么联系,FWT 也可以用分治乘法做是 \(O(3^n)\) 的。(复杂度=枚举子集)。

C

\(k\) 维欧几里得空间中,一开始有 \(t\) 个固定点和 \(m\) 个可选点。\(q\) 次操作。
插入操作:加入一个点作为新的可选点。查询操作:选出所有的固定点以及 \(m\) 个可选点,使得这 \(m+t\) 个点之间两两曼哈顿距离之和最大,并输出这个最大的曼哈顿距离之和。\(k\le 4,m\le 4,t\le 20,q\le 20000\)

首先 \(t\) 个带固定点是没用的,相当于给可选点加了一个点权。
拆绝对值。\(|x_1-y_1|+|x_2+y_2|\le (\pm x_1\pm y_1)+(\pm x_2\pm y_2)\),其中 \(x_1,x_2\) 异号,\(y_1,y_2\) 异号。
所以你可以取所有赋权值方案的最大值即可。所以我们的想法是使得每个点独立开来。
对于每一维都是 \(-3x_1+-1x_2+x_3+3x_4\) 的形式。给我们选的点的每一维分配 \(1\sim 4\) 一个位置。
然后你要选 \(4\) 个点,这四个点在每一维的位置不能相同。
相当于一个 \(m\times k\) 的矩形,用 \(m\) 个点覆盖,每个点覆盖 \(k\) 个不同行的位置,这个可以用状压 dp 来做。
即维护 \(f(S)\) 表示当前覆盖了矩阵中状态为 \(S\) 的位置此时的答案,状态只有 \(C_{16}^4+C_{16}^8+C_{16}^{12}\) 个的。
注意每个点不能重复出现,所以转移要倒着转移。
关键是拆绝对值使得每个点贡献独立于别的点。

posted @ 2025-02-09 19:41  s1monG  阅读(21)  评论(0)    收藏  举报