闲话 23.3.2
闲话
APJifengc:
您都已经切 AGC 的 E 了 您太强了
您都已经写一个美元符号了 您太强了
不懂
发现 APJ 老师回家卷数奥的反常积分题
太强了
SoyTony:APJ 是美国间谍 —— 白宫咋不用支付宝?白宫还是太不懂了
how to solve
upd:
SpyTony 走过来 拿了我一条咖啡
我看着他撕开 善意地提醒说用热水沏
他直接往嘴里干了一口
APJ:没带打火机咱可以不咬
随后 SoyTony 轻描淡写地喝了口水
然后咳*5
三口给干完了
瑞平 不行啊这(
\(\text{Simu}\)
T1
设一个点的标号是这个点作为被删除的子树的根对应的操作的编号。若一个点祖先中最小编号是 \(x\),则它对 \([1, x - 1]\) 的答案都有贡献。
这个可以直接从小到大枚举每个点后用父亲更新得到,随后维护差分即可。
不用 dfs,常数小点。\(O(n)\)。
T2
对点 \(i\) 的答案就是每个点 \(u\) 以 \(i\) 为根的子树内权值小于 \(u\) 的权值的点数之和,考虑换根。
以 1 为根的答案是易算得的,用树状数组统计即可。同时维护一个这个子树内权值小于 \(fa[u]\) 的权值的点数。
然后考虑换根。当根从 \(u\to v\) 时,\(v\) 对答案的贡献变为 \(0\),\(u\) 对答案的贡献为不在以 1 为根时 \(v\) 子树内的点的贡献。
拿总数直接减就行了。\(O(n\log n)\)。
T3
问题是经典的 dp,又带修,考虑上线段树维护。
若第 \(i\) 个字符是 ABC
中的第 \(0\le k\le 2\) 个,则第 \(i\) 个位置的矩阵就是第 \(k\) 行全 \(1\) 的单位矩阵。
证明?考虑写出转移即可。
然后修改也很简单了。\(O(4^3n\log n)\)。
T4
我怎么不会贪心?哦我一直不会啊那没事了。
原题是普及-,有个经典结论是答案就是 \(\sum \max(0, a_i - a_{i - 1})\)。
现在考虑配对。考虑一种贪心策略,遍历 \(b_i\),若有 \(b_i > 0\) 将其压入队列中,\(b_i < 0\) 则:若使得代价最大,与最靠左的 \(b_i\) 配对;若使得代价最小,与最靠右的 \(b_i\) 配对。
注意到 \(a_i\ge 0\) ,所以我们一定能找到数字配对。可以用交换法证明贪心的正确性。
\(O(n)\)。
杂题
随机开 At 的题 开到了 AGC
很快啊 —— D 没看懂所以不写了
给定两个长度为 \(n\) 的 01 串 \(A, B\)。保证两个串内的
1
数量相同,设有 \(m\) 个。令 \(\langle a_i\rangle , \langle b_i\rangle\) 分别表示 \(A, B\) 中1
的所有下标按顺序排列组成的序列。随机打乱 \(a, b\) 序列,按这序列的下标 \(i\) 从小到大顺序交换 \(A[a_i]\) 和 \(A[b_i]\)。令 \(p\) 表示操作完成后 \(A = B\) 的概率,请求出 \(p\times (k!)^2\) 在模 \(998244353\) 意义下的值。\(1\le n\le 10^4\)。
很好玩的题啊(
答案就是计数满足结果有 \(A=B\) 的操作序列数量。
可以发现,我们若想使得 \(A = B\),则需要构造操作序列,让 \(A\) 中多的 \(1\) 被转移到 \(B\) 中是 \(1\) 而 \(A\) 中是 \(0\) 的位置。这种操作序列定形如 \(S\to U\to \cdots\to U\to T\),其中 \(S, U, T\) 都指代一系列位置 \(k\) 中的一个,两个位置 \(k_1, k_2\) 写作 \(k_1 \to k_2\) 表示交换 \(A[k_1]\) 和 \(A[k_2]\)。
\(S = a \in \{k : A[k] = 1 \land B[k] = 0\}\);
\(U = a \in \{k : A[k] = 1 \land B[k] = 1\}\);
\(T = a \in \{k : A[k] = 0 \land B[k] = 1\}\);
可以发现,如果构造一个节点数为 \(n\) 的图,将一个操作看做 \(a\to b\) 的连边,则我们需要的就是一系列以 \(S\) 类位置开始,\(T\) 类位置结束,中间经过一系列 \(U\) 类位置的链。
考虑 dp 这个图的形态。由于 \(S, T\) 两类位置是对称的,他们的总数相同,记作 \(p\);\(U\) 类位置的总数记作 \(q\)。由于并不需要用到所有 \(U\) 类位置,我们可以在 dp 数组中加一维表示使用的 \(U\) 类位置数。
我们设 \(f(i, j)\) 为有 \(i\) 条链,包含 \(j\) 个 \(U\) 类位置的图。则我们有两种转移:
- 可以加入一个 \(S\) 类位置和一个 \(T\) 类位置组成新的一条链,钦定放在末尾。这时我们从 \(i\) 个已有的 \(S\) 类位置中选一个,\(T\) 类位置同理,共 \(i^2\) 种选法。
\(f(i - 1, j) \times i^2 \to f(i, j)\) - 可以加入一个 \(U\) 类位置进一条链,钦定放在末尾。链彼此不同,位置彼此不同,共 \(i\times j\) 种选法。
\(f(i, j - 1) \times ij \to f(i, j)\)
初值有 \(f(0, 0) = 1\)。
答案的统计需要枚举用了多少个 \(U\) 类位置。假设有 \(k\) 个位置没有在链内,则 \(\dbinom{p}{k} \times (k!)^2\) 就是他们内部形成的形态数;链间的配对方案数是 \(\dbinom{m}{k}\)。即
总时间复杂度 \(O(n^2)\)。
用组合结构刻画可以得到更优秀的复杂度。这里我们不妨钦定 \(a\) 和 \(b\) 的对应关系,产生 \(k!\) 种排列方法,下面只需要确定顺序。
首先我们承接构造图的思想。从整体来看,有一些点的入度或出度为 \(1\),另一些点的入度和出度都为 \(1\)。我们可以断言,这图一定是由一系列不交的链和环组成的。根据生成函数相关知识,我们只需要有标号地确定链/环的组合类形态,再用有标号方法组合,即可得到整个图的组合类。
设链的有标号类为 \(\mathcal C\),环的有标号类为 \(\mathcal R\)。
一条链一定形如 \(S \to U\to \cdots \to U \to T\),我们可以先将全部 \(p\) 个 \(S\) 有标号排列,每个 \(S\) 分别对应一个 \(T\),这产生了 \(p!\) 种排列方法,在答案中乘入即可。剩下的节点都是 \(U\) 类节点。
对于长度(不计端点)为 \(k\) 的链,我们共有 \(k!\) 种方式分配非端点节点的标号,而且在 \(k + 1\) 条边对应的 \((k + 1)!\) 种操作方案中只有一种是合法方案。可以写出
图中可以有任意多个用任意非 \(0\) 数量的 \(U\) 类节点组合的环。
对于长度(所有点数)为 \(k\) 的链,我们共有 \(\begin{bmatrix}k \\ 1\end{bmatrix} = (k - 1)!\) 种方式分配节点的标号,而且在 \(k\) 条边对应的 \(k!\) 种操作方案中每种都是是合法方案。可以写出
当然这个结论大概已被绝大多数人熟知,这里只是结合题目信息再次推导。
我们已经知道了图中共有 \(p\) 条链,同时确定了他们的起点和终点。链间有序,并且需要恰好取 \(p\) 个,因此作 \(p\) 次方的构造。环间无序,数量任意,因此作有标号 \(\text{Set}\) 构造。也就是
这里需要提取的就是 \(q\) 次项系数,因为有 \(q\) 个点是 \(U\) 类节点。答案就是
总时间复杂度 \(O(n\log n)\)。
有 \(n+m\) 个问题,其中有 \(n\) 个问题的答案是
YES
,\(m\) 个问题的答案是NO
。当你回答一个问题之后,会知道这个问题的答案,求最优策略下期望答对多少题。答案对 \(998244353\) 取模。\(1\le n, m\le 5\times 10^5\)。
首先有个很自然的想法:当 \(n \neq m\) 时,我们当然会选择作为更多题目的答案的选项。不妨假设 \(n > m\),这样我们最开始总会先猜测答案是 YES
。
考虑把这个过程放在网格图上刻画:初始位置是 \((n, m)\),需要到的位置是 \((0, 0)\)。
在 \(n > m\) 时,考察猜测 YES
会产生什么影响。若猜对了,则 \((n, m)\to (n - 1, m)\);反之会到 \((n, m - 1)\)。最终我们一定会到达 \(y = x\) 上一点,记为 \((i, i)\)。
在这个过程中,我们答错了 \(m - i\) 道题,答对了 \(n - i\) 道题。
到达 \(y = x\) 上一点后,由于我们已知信息无法判断哪个更优,我们可以任意地选择回答 YES
/NO
。随后无论如何,我们又会回到 \(n\neq m\) 的情景。
这样总的流程就很明晰了:我们总会不断回答一个答案,直到到达 \((i, i)\)。在这之后,我们以 \(1/2\) 正确的概率回答一个问题,并重复前一句的操作。
容易发现,不在 \(y = x\) 线上的操作总使我们答对 \(\max(n, m)\) 道题,而在 \(y = x\) 线上的操作有几率让我们多答对一道题。前一部分的统计是简单的,我们接下来只需要统计后一部分。
统计后一部分,也就是统计所有经过 \((i, i)\) 点的折线数量,这些折线都有 \(1/2\) 的贡献。对 \(i\) 求和后除以总折线数就是期望了。
这数量是好统计的。拆成两部分,有答案即为 \(\dbinom{2i}{i}\dbinom{n + m - 2i}{n - i}\)。
答案就是
总时间复杂度 \(O(n)\)。
以下是博客签名,与正文无关。
请按如下方式引用此页:
本文作者 joke3579,原文链接:https://www.cnblogs.com/joke3579/p/chitchat230302.html。
遵循 CC BY-NC-SA 4.0 协议。
请读者尽量不要在评论区发布与博客内文完全无关的评论,视情况可能删除。