Examples

2023-1-4 #23 也无妨 将泪水放逝雨断后 作引

——闹闹丶《晴天掩饰雨》

这一段一直没发闲话啊,主要是最近一直在摆(

稍微玩了一下 妄想症 Deliver Me,总体体验还是不错的。

image


总是会想起 cmd 博客中的一段话:

我正在做的每一道题都记在博客里,有仅是眼缘好的,有完成了核心想法的,有只剩动手写的,有写了没调完的。这样,一旦手头上的任务卡住了,可以快速切换到另一个阶段去。

一直向往着这样的做题方式,可限于学习效率,始终无法实现。😔


119 P7341 『MdOI R4』Phoenix

它的要求是达到下界,那么对于每个颜色,它出现的位置都必须连续。

我们不考虑每个位置填什么数,直接考虑对于每个颜色的区间,决定其位置。

很容易计算出每个颜色区间的长度,以及两两之间的交集。

注意数据保证有解,所以接下来的分析可能比较随性。

我们发现,如果两个区间交且不包含,那么其位置关系基本已经确定,只有翻转会带来 \(2\) 的贡献系数。

把这样的区间用并查集缩在一起,然后再找到互相包含的区间,把一个区间直接包含的所有子区间的插入方案算一下就好了。(就是个上升幂)

复杂度 \(O(nm^2+m^2\log m)\)

120 P8922 『MdOI R5』Squares

我们只需考察两种正方形:至少三个边界上有点,两个边界且一个对角上有点(否则总能扩展)。

不妨考虑所有左,右,下有点的矩形,枚举下面的点,那么这个区域一定可以被唯一确认,二分边长,那么我们只需检查两边 \(y\) 一段区间的极差,主席树上二分即可 \(O(n\log n)\)

求解答案采用扫描线,如果是任意矩形这是只能做到 2log 的(线段树+set),但是正方形有性质。

对于一个线段树结点,考察所有与它有交的正方形,不妨按照左边界依次加入,若某个正方形加入的更晚,边长更大,我们可以淘汰掉被它偏序的正方形。于是我们维护一个单调队列状物就好了,队首到队尾边长递减,右端点递增(手动把虽然加入的晚但是右端点更靠前的正方形忽略掉)。

复杂度 \(O(n\log n)\)

121 P7882 [Ynoi2006] rsrams

对颜色出现次数根号分治。(阈值 \(\sqrt m\)

小颜色明显可以枚举每个子区间,做一个 \(O(n\sqrt m)\) 次修改,\(O(m)\) 次查询的二维数点,扫描线+分块即可。

绝对众数有一种经典处理方法,考虑某种颜色,将这种颜色设为 \(1\),其余颜色设为 \(-1\),那么绝对众数等价于区间和大于 \(0\)。对于其出现所有位置,将其左右第一个没有被取出的的位置取出(见 P8349 [SDOI/SXOI2022] 整数序列)那么只会取出 \(O(n)\) 个位置,且能成为众数端点的位置也是被取出的位置。

于是我们每种颜色跑个莫队就好了,一次莫队复杂度 \(O(m+n\sqrt m)\),注意调节块长使得莫队复杂度正确。

复杂度 \(O(n\sqrt m+m\sqrt n)\)

122 AGC046D Secret Passage

我们能生成的串肯定是一个后缀,塞入一对 \(0\)\(1\) 得到的。

我们考虑把答案放在其与原串 LCS 上考虑,令 \(f_{i,j,k}\) 表示 LCS 为 \(i\),多了 \(j\)\(0\)\(k\)\(1\) 的串数量。

为了不算重,我们插入 \(0,1\) 都只能在不与原串匹配的情况下插入。

然后再 dp 一下 \(g_{i,j,k}\) 表示前缀 \(i\) 能否凑出 \(j\)\(0\)\(k\)\(1\) 就好了。

复杂度 \(O(n^3)\)

123 BJ United Round #1 梦中的项链

先不考虑环的约束。

对于相邻两项不同这一限制容斥,我们钦定放了一个同色段,列出生成函数:

\[F(x)=\sum_k\sum_i a_k(-1)^{i-1}x^{ik} \]

(这个的代数意义可以考虑一个长度大于 \(1\) 的同色段,贡献为 \(0\)

那么答案就是 \(\frac{1}{1-F(x)}\)

再考虑环的约束,我们只需容斥前缀和后缀的同色情况,将上述答案乘上:

\[\sum_k\sum_p\sum_q a_k(-1)^{p+q-1}x^{(p+q)k)} \]

注意一些 corner case 的贡献,比如所有颜色均相同,比如序列为空。(没写代码,随便口胡!)

124 P8205 [Ynoi2005] vti

比较简单啊。

建个虚树,很容易把问题转化为线性次直链逆序对查询。(dfs 序排序,每个点到虚树根的答案减去每对相邻点的 lca 到虚树根的答案)

可以直接树上莫队,然后二次离线。

也可以 top cluster,然后将询问分类,莫队二离。

125 P6780 [Ynoi2009] pmrllcsrms

将序列按照 c 分块,整块之间答案的维护,以及每次询问的散块贡献都是同一个问题:两个相邻快,前一个块的后缀和后一个块的前缀的答案。

我们记 \(a_i\) 表示前一个块长度为 \(i\) 后缀的和,\(b_i\) 为后一个块长度为 \(i\) 前缀和,那么限制就是 \(i\leqslant k,i+j\leqslant c\),翻转一下就是 \(j\leqslant i\leqslant k\),这个线段树很好维护。

块间答案再用一棵线段树维护即可,复杂度 \(O(n\log n)\)

126 rdfz 联考-二分图最大匹配

AGC034D 加强版。

曼哈顿距离的 \(\max\),可以任意钦定两维的符号,然后匹配。

建立费用流模型:四个点表示每种正负号形式,每个红点到这四个点连边,每个蓝点从这四个点连边。(当然还有源汇的边)

这个模型也可以模拟费用流,我们用堆维护:源到这四个点的增广路,四个点到汇的增广路,四个点两两之间的增广路(注意这个东西增广路可能很复杂,算出某两个点之间的一条增广路后还要跑个 floyd)。

这样复杂度就是 \(O(n\log n)\) 了。

127 AGC054E ZigZag Break

结论题。

不妨令 \(p_1<p_n\),另外一种情况推法是一样的。

结论是,合法当且仅当存在 \(i\),满足 \(p_i\leqslant p_1<p_n\leqslant p_{i+1}\)

充分性:我们把 \(1\)\(i\) 删成一个下降的序列,\(i+1\)\(n\) 删成一个下降的序列,那么后面显然也能消完。

必要性:我们操作一步后,一定无法新增这样的位置,归纳即可。

计数就比较经典了,我们考察 \([1,p_1] (p_1,p_n) [p_n,n]\) 三类数,计数不合法,也就是不能有三类在一类的后面的方案。

我们先插入二类,后面一类和三类的插入方案数都是上升幂。

列出式子:(假设 \(p_n=p_1+k\)

\[\sum_{k=1}^{n-p_1}(k-1)!\frac{(p_1+k-3)!}{(k-2)!}\frac{(n-p_1-2)!}{(k-2)!}\\=(n-p_1-2)!\sum_{k=1}^{n-p_1}\frac{(k-1)(p_1+k-3)}{(k-2)!}\\=(n-p_1-2)!\sum_{k=0}^{n-p_1-2}(\frac{k(p_1+k-1)}{k!}+\frac{(p_1+k-1)}{k!})\\=(n-p_1-2)!(p_1!\sum_{k=0}^{n-p_1-2}{p_1+k-1\choose k-1}+(p_1-1)!\sum_{k=1}^{n-p_1-2}{p_1+k-1\choose k})\\=(n-p_1-2)(p_1!{n-2\choose p_1+1}+(p_1-1)!{n-2\choose p_1}) \]

\(p_1>p_n\) 同理,式子是:

\[(p_1-3)!((n-p_1+1)!{n-2\choose n-p_1+2}+(n-p_1)!{n-2\choose n-p_1+1}) \]

复杂度 \(O(T+n)\)

128 AGC033E Go around a Circle

假设第一个字母是 R,B 只要反转一下就好了。

那么每个点附近至少一个 R,也就是 B 不能相邻。不妨考虑第一段 R 段,记长度为 \(l\),可以发现环上所有 R 段长度必须为奇数,同时长度也不能超过 \(l+[l\bmod 2=0]\),否则长度最长的段的起始位置或起始位置后面的位置无法满足条件。

同样地考虑给定字符串的其余 R 段,可以发现偶数 R 段没有限制,而奇数 R 段限制了环上每个段段长不能超过它。

那么可以直接 dp,令 \(f_i\) 为长度为 \(i\) 的方案数,前缀和优化就好了。由于还要考虑循环移位的贡献,\(f_i\) 的初值需要设定一下。

复杂度 \(O(n)\)

posted @ 2023-01-05 21:15  xiaoziyao  阅读(178)  评论(2)    收藏  举报