做题记录 26.3.20

\(\textcolor{purple}\odot\) P8292 [省选联考 2022] 卡牌

\(V=2000\),可知 \(\le V\) 的质数数量为 \(303=\pi(V)=(1+o(1))\times \frac V{\ln V}\),记为 \(L_1\)

\(S=\lfloor\sqrt V\rfloor=44\),则 \(\le S\) 的质数数量为 \(14=\pi(S)=(2+o(1))\times \frac {\sqrt V}{\ln V}\),记为 \(L_0\)

称这 \(L_0\) 个为关键质数,\(S+1\sim V\) 中质数为普通质数,两者合称为全体质数

一组询问给出一系列质数,为全体质数的一个子集,\(a_{1\sim n}\) 中每个数也对应全体质数的一个子集,等价于查询有多少 \(a_{1\sim n}\) 的子集使得它们对应子集的并为题目给出的子集的超集

显然一个 \(a_i\) 包含至多一个普通质数,由此将所有 \(a\) 划分为 \(L_1-L_0+1\) 个等价类,设 \(a_i\) 对应关键质数的子集为 \(F_i\),对应等价类为 \(id_i\),预处理部分容易做到 \(O(V+n\sqrt V)\)

一次询问中给定的质数也分为关键的 \(S\) 和普通的 \(T\),对于所有等价类,若不在 \(T\) 中则选择任意,若在 \(T\) 中则至少选择一个,要求选出的所有 \(F\) 之并为 \(S\) 的超集

对于每个等价类预处理 \(c_S\) 表示 \(F\subseteq S\) 的数量,容易高维前缀和做到 \(O(L_1\times L_02^{L_0})\)

则一次询问 \((S,T)\) 中,选出的 \(F\) 之并为 \(S'\) 的子集的方案数为

\[\prod_{g\in G} (2^{c(g)_{S'}}-[g\in T]) \]

其中 \(G\) 表示等价类的集合

对得到的数组做 \(\text{FWT}\),则可以得到每种选出的 \(F\) 之并对应的方案,从而可以统计答案

这部分暴力实现为 \(O(q(L_12^{L_0}+L_02^{L_0}))\) 的,后面部分勉强可以接受,考虑优化前面部分

实际上 \(g\in G\) 的部分比较稀疏,对于连续一段 \(g\notin G\) 的部分,等价于若干 \(2\) 的幂相乘,因此可以预处理 \(c\) 的前缀和,从而做到 \(O(q(|T|2^{L_0}+L_02^{L_0}))\)

总时间复杂度 \(O(V+n\sqrt V+(\pi(V) \pi(\sqrt V)+\sum c+q\pi(\sqrt V))2^{\pi(\sqrt V)})\),其中 \(c\) 为询问中给出的质数数量,需要一定的卡常

代码

\(\textcolor{blue}\odot\) P3082 [USACO13MAR] Necklace G

\(f_{i,j}\) 表示 \(s_{1\sim i}\) 的后缀匹配 \(t\) 前缀的最大长度为 \(j\) 时最少需要删去的字符数量,容易做到 \(O(nm)\)

代码

\(\textcolor{purple}\odot\) CF17E Palisection

通过马拉车对每个终点预处理最大回文串,得到集合 \(S\),其中每个 \([l,r]\in S\) 对应一组回文串

题目要求相交的对数,容易转化为求不相交的对数,预处理 \(cl_i\)\(cr_i\) 表示以 \(i\) 为左右端点的回文串数量(每个 \([l,r]\in S\)\(cl\)\(cr\) 的贡献为区间加),则不相交的总对数为 \(\sum_{r<l} cr_r\times cl_l\)

容易做到 \(O(n)\)

代码

\(\textcolor{blue}\odot\) CF2180F1 Control Car (Easy Version)

\(f_{i,j,0/1,0/1}\) 表示目前在 \((i,j)\),要走到 \((n,m)\),上一步从上方/左侧过来,第三个参数为 \(0\) 表示左侧,此时第四个参数表示 \((i,j)\) 的右上角是否向下(\(0\) 表示是,下同); \(1\) 表示右侧,此时第四个参数表示 \((i,j)\) 的左下角是否向左;这种情况下可以到达的概率

显然 \(f_{i,j}\)\(f_{i+1,j}\)\(f_{i,j+1}\) 转移而来,容易 \(O(nm)\) 预处理

总时间复杂度 \(O(nm+t)\)

代码

参考

NFLS #P13074. 渐变项链

枚举 \(c_1\),双线反射容斥,化简后可以得到 \((n,m)\) 的答案为

\[(m+1)\left(\sum_{i\equiv n\pmod {(m+1)}} \binom{2n}i\right)-2^{n+n} \]

\(m\ge \sqrt n\) 时直接算,当 \(m<\sqrt n\) 时,令 \(f_{i,j}=\sum_{k\equiv j\pmod {(m+1)}}\binom ij\),可以做到 \(O(nm)\)

总时间复杂度 \(O(n\sqrt n)\)

代码

\(\textcolor{blue}\odot\) CF2159D1 Inverse Minimum Partition (Easy Version)

每个右端点在区间权值 \(\le 2\) 的情况下尽量向前,显然至多 \(\log_2(V)\) 段,从而答案上限为 \(O(\log_2(V))\) 的,可以对每个答案求出最大右端点

时间复杂度 \(O(\sum (n\log V+n\log n))\)

代码

参考

posted @ 2026-03-21 06:48  Hstry  阅读(0)  评论(0)    收藏  举报