[一些题] 贺题记录
[A] 表示已通过,[W] 表示寄了,[N] 表示没写。
自己做出来的题或者贺出来感觉一句话写不完的题应该都是 link 到 blog 里了 套娃了。
-
[A]Fibonacci Additions:考虑异形差分 \(d_i = a_i-a_{i-1}-a_{i-2}\),问题转化为差分数组单点加,复杂度 \(O(n+q)\)。 -
[A]Serious Business:戳我。 -
[A]Sonya and Bitwise OR:注意到一个序列不同的前缀 or 值只有 \(O(\log M)\) 种,考虑节点上记录前后缀 or,那么只需要记录 \(O(\log M)\) 个区间及其值,PushUp 的时候可以双指针更新答案,复杂度 \(O((n+q) \log n \log M)\)。 -
[A]Hamiltonian Cycle:高深的阶构造。 -
[A][Ynoi2011] 竞赛实验班:题解写得肯定比我好。 -
[A]k-Maximum Subsequence Sum:考虑线段树来做一个模拟费用流(反悔贪心),每个点选偶数次表示不选,奇数次表示选,费用流模型就比较清晰了,那么需要查询 GSS、区间取反,由于这个取反操作所以还需要维护 LSS,写起来比较怄火。 -
[A]Replace:戳我。 -
[A]MEX Tree Manipulation:早就会了,考虑动态链分治,每个点考虑轻儿子后关于重儿子权值 \(x\) 的函数形如 \(f(x) = [x=A]v_1+[x \ne A]v_2\),子树和是同理的,都很好维护,每次需要更新轻儿子贡献出来的 \(\rm MEX\),注意到值域是 \(O(\log n)\)(最坏每次复制一份挂到下一个点上,每次树大小 \(\times 2\)),于是可以每个点开桶,时间复杂度 \(O(n \log^2 n)\)。 -
[N]Jumping Through the Array:戳我。 -
[A]JYPnation:都去看找对题解!!11 -
[A]Colorful Tree Again:戳我。 -
[A][Ynoi2003] 铃原露露:芜湖的,很强大。可以去看题解。 -
[A]Mashitali and Hagh Trees:戳我。 -
[A]节日庆典:要对每个前缀找它的一个后缀 \(T\) 使得 \(T+(S-T)\) 最小,考虑答案集合的大小,首先能更新答案的后缀一定是位置在后面的是位置在前面的前缀,考虑两个后缀 \(T_1,T_2\) 满足 \(T_2-T_1+1 \lt len(T_2)\),也就是起点距离小于 \(T_2\) 的长度,那么设 \(T_1 = AAB\),\(T_2 = AB\),\(T_3 = B\),其中 \(B\) 是 \(A\) 的前缀,不难发现由 \(T_1,T_3\) 更新的答案一定不比 \(T_2\) 劣;这样对于一个前缀有效的位置就只有 \(O(\log n)\) 个,那么直接暴力维护这个集合,每次插入前先弹出无效位置,复杂度就是 \(O(n \log n)\),为了不被卡常最好写 \(O(n)\) 的 \(\text{ExKMP}\) 来判断字典序。 -
[A]Gates to Another World:考虑线段树结构,每一层表示进行由某一位构建的边的连接的过程,那么每次是把左右子树对位连边(不难发现如果从下往上每层都连满,每次相当于把左右儿子缩成一个点),但这样点数是 \(O(n2^n)\);这里有个很妙的点,我们考虑动态开点,你会发现没有开出来的点相当于进行了到叶子的那些层的连边,于是可以直接区间覆盖,最后得到 \(O(nm)\) 个点,然后暴力进行连边就行了(两棵子树递归到叶子用并查集连边),每个点最多贡献 \(O(n)\) 次,复杂度 \(O(n^2m \alpha(n))\)。 -
[A]Geometric Progressions:对于每个质因子能列出 \(n\) 个同余方程,因为 CRT 不能处理模数为 \(0\),所以先列一些方程组判掉模数存在 \(0\) 但是有解的情况,然后再对模数都不为 \(0\) 的情况用 exCRT,具体可以看题解。 -
[A]Tree Elimination:考虑到删除的枚举顺序是可变的,你只需要保证对每个点考虑了与那些 与它的删除顺序不完全由边的编号决定的点 的相对顺序就可以了,也就是说你只需要对每个点连边的点考虑,对这些点的相对删除顺序计数,所以树形 dp,设 \(f_{u,0/1/2/3}\) 为考虑了 \(u\) 子树,\(u\) 是保留 / 被 \((u,fa_u)\) 删除 / 被 \(id \lt (u,fa_u)\) 的边删除 / 被 \(id \gt (u,fa_u)\) 的边删除,然后大力分讨一下每种的转移就行了,复杂度是 \(O(n)\)(对于对儿子排序,你发现删除父亲后它就已经是按 \(id\) 升序了)。 -
[A]Beautiful Matrix:Wei 老师题解。 -
[A]Exercise P:(% 7KByte)一个排列的答案就是所有置换环长度的 \(\rm lcm\),那么要求所有排列的 \(\rm lcm\) 之积,先转化为求 \(\text{lcm} = x\) 的排列数,因为不好计数所以 前缀和一次 变成求 \(x \mid \text{lcm}\) 的排列数,这样答案就是 \(\prod_{p} \prod_{i=1} p^{F(p^i)}\),设 \(G(n)\) 为 \(\rm lcm\) 被 \(p^i\) 整除,长度为 \(n\) 的排列数,那么 \(F(p^i) = G(n)\);这等价于至少一个置换环长度被 \(x\) 整除,容斥一下变成求没有,设为 \(f(n)\);然而还是不好求,再容斥一次,设 \(g(n)\) 表示完全由 \(x \mid len\) 的置换环拼成的排列数,那么 \(\begin{aligned} f(n) = n! - \sum_{i=1}^{n} \dbinom{n}{i}f(i)g(n-i)\end{aligned}\);对于 \(g\) 可以枚举 \(1\) 号点所在的环大小,\(\begin{aligned} g(n) = \sum_{i=0}^{n-1} (n-1)^{\underline{i}} g(n-i-1) \end{aligned}\);考虑刷表,则复杂度为 \(O(\sum \dfrac{n^2}{p^2})\),\(\sum p^{-2}\) 是 prime zeta function,在这里可以取 \(0.4522\),所以复杂度是 \(O(n^2)\)。 -
[A]Rainbow Rectangles:显然可以离散化,但枚举左上角很明显没有出路,所以枚举上下两行算每一列的贡献,于是自然的想法是维护的 \(R_j\) 表示第 \(j\) 列为最左端的有效点,右边最近合法的右端点,因为加入一行不好维护,所以考虑删除,那么只需要用multiset维护每个颜色在前 \(i\) 行的位置,然后每次是 \([pre,j]\) 对 \(suc\) 取 \(\max\),显然这个 \(R_j\) 是不降的,所以二分区间赋值就好了,复杂度 \(O(n^2 \log n)\)(说实话这个离散化就有大病)。 -
[A]Gregor and the Two Painters:直接数连通块不好做,也不好转成数边,于是考虑给每个连通块一个特征,对这个特征计数,这里可以用一个连通块内颜色值 \(a_x + b_y\) 最小且最靠左上的点表示这个连通块,设 \(x\) 左边第一个 \(a_j \le a_x\) 的 \(j\) 为 \(La_x\),右边第一个 \(c_j \lt c_x\) 为 \(Ra_x\),对 \(b\) 数组则记作 \(Lb_y,Rb_y\),那么一个点表示一个连通块当且仅当它不能走到第 \(La_x\) 行、第 \(Ra_x\) 行、第 \(Lb_y\) 列和第 \(Rb_y\) 列(考虑走到了 \((La_x+1,T)\) 那么有 \(a_{La_x} \le a_{La_x+1} \le x-b_T\),那么 \(a_{La_x} + b_T \le a_x+b_y\) 会成为新的特征点),这个的充要条件就是不能走到 \((La_x,y),(Ra_x,y),(x,Lb_y),(x,Rb_y)\)(你只能在 \((Lb_y,Rb_y)\) 中找到 \(b = b_y\),它们与 \(y\) 等价),于是可以发现即 \(a_x +b_y \le X \land a_x + \min(\max_{i=Lb_y+1}^y b_i,\max_{i=y}^{Rb_y-1} b_i) \gt X \land b_y + \min(\max_{i=La_x+1}^x a_i, \max_{i=x}^{Ra_x-1} a_i) \gt x\),而这个 \(\max\) 的 \(\min\) 是可以单调栈预处理的,所以 BIT 离线二维数点就行了。 -
[A]Ultimate Weirdness of an Array:考虑枚举答案,还是不好求,考虑 后缀和一次 变成对每个 \(l\) 维护 \(f([l,r]) \ge x\) 的最远 \(r\),这样 \(\begin{aligned} sum(f_i) = \sum_x cnt(f_i \ge x) \end{aligned}\)(这个式子和期望转概率形式相同),然后倒序枚举 \(x\),使答案可以 \(= x\) 即是说 \(l \in [1,fir_{x,1}]\) 的 \(r\) 对 \(lst_{x,2}-1\) 取 \(\max\),\((fir_{x,1},fir_{x,2}]\) 对 \(lst_{x,1}-1\) 取 \(\max\),其中 \(fir_{x,i}\) 表示 \(x \mid a_j\) 中从前往后第 \(i\) 个 \(j\),\(lst_{x,i}\) 表示从后往前;区间取 \(\max\),线段树二分就行了,但是瓶颈在于 \(O(n \sqrt{M})\) 分解因数(需要更新因数的 \(fir,lst\),当然这个东西应该是可以换成埃筛的)。 -
[A]Mathematical Expression:乐子题,首先判掉没有*、没有+和只能用一种运算的情况,然后就有个很显然的 dp;虽然你直接 dp 答案肯定存不下,但是你考虑如果 \(\sum_{i=l}^{r}[a_i \ge 2] \ge \log_2 9(r-l+1)\) 那么一定是合并了更优(\(\sum \le \prod\)),所以你只需要对段内个数小于 \(O(\log n)\) 的暴力 dp 就行了,你甚至可以斜率优化,复杂度应该是 \(O(\log^2 n)\) 或 \(O(\log n)\)。 -
[A]Formurosa:(题目名字念起来很好听)趣味题,因为保证了有 \(0\) 有 \(1\),而且可以询问无限次,我们不妨直接看作是往里面代入了一个01串,那么设这个串表示的二进制数是 \(S\),代入后最后的值是 \(f(S)\),有结论是能解出当且仅当存在一个 \(S\) 使得 \(f(S) = f(\overline{S})\)(\(\overline{S}\) 表示对 \(S\) 取反),感性很好理解就不证明了(?),于是建出表达式树,设 \(g_{u,0,1,2}\) 表示子树中是否存在 \(f(S) = f(\overline{S}) = 0\) / \(f(S) = f(\overline{S}) = 1\) / \(f(S) \ne f(\overline{S})\),转移的时候分讨合并左右子树,复杂度是 \(O(n)\)。
代码写得也很趣味可以看看:算了,太长一坨了,这里就不放了。 -
[A]Partial Virtual Trees:Wei 老师题解。 -
[A]Become Big For Me:\(\gcd\) 和 \(\rm lcm\) 之间可以使用 min-max 容斥转换,类似地,考虑对 \(\gcd_{i \ne j} a_ia_j\) 应用扩展 min-max 容斥,即 \(\begin{aligned} \text{k-th max}(S) = \sum_{T \subseteq S} (-1)^{|T|-k}\dbinom{|T|-1}{k-1} \min(T) \end{aligned}\),那么可以得到 \(\begin{aligned} \gcd a_ia_j = \prod_{p \in Prime} p^{\sum_{T \subseteq \{a_n\}}(-1)^{|T|-2}(|T|-2) \max\{k(p,x) \mid x \in T\}} = \prod_{T \in \{a_n\}} (\text{lcm}(T))^{(-1)^{|T|-2}(|T|-2)} \end{aligned}\),于是这里有了一个 \(O(n2^n)\) 次操作的构造,考虑选出原序列一个子集 \(S\) 使得 \(\gcd(S) = \gcd(\{a_n\})\),再在 \(\{a_n\} \setminus S\) 中选出子集 \(T\) 使 \(\gcd(T) = \gcd(\{a_n\} \setminus S)\),那么 \(\gcd_{i \ne j} a_ia_j = \gcd_{i \ne j \in (S \bigcup T)} a_ia_j\),由于值域保证了一定能选出大小不超过 \(7\) 的 \(S,T\),所以直接随机化,每次取前 \(7\) 个出来判定即可。 -
[A]Choosing Ads:直接线段树维护候选人个数是 \(\lfloor \dfrac{100}{p} \rfloor\) 的摩尔投票就行了。 -
[A]Inverse Inversions:戳我(参纤体)。 -
[A][USACO18FEB]Cow Gymnasts P:戳我(里面有打的表)。 -
[A]Classical?:jiangly 题解。 -
[A]Building Forest Trails:戳你。 -
[A]Weak Subsequence:戳我(证明感觉比题解的简单一点)。 -
[A]PCOPTRIP - Counting Pairwise Coprime Triples:戳谁。 -
[A]Battalion Strength:戳他。 -
[A][APIO 2021] 雨林跳跃:别戳了。

浙公网安备 33010602011771号