闲话

APJifengc:
您都已经切 AGC 的 E 了 您太强了
您都已经写一个美元符号了 您太强了
不懂

发现 APJ 老师回家卷数奥的反常积分题
太强了
SoyTony:APJ 是美国间谍 —— 白宫咋不用支付宝?白宫还是太不懂了

how to solve

\[\int_0^{\pi / 2} \frac{x}{\tan x} \text d x
\]

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 没看懂所以不写了

AGC019E

给定两个长度为 \(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\) 类位置的图。则我们有两种转移:

  1. 可以加入一个 \(S\) 类位置和一个 \(T\) 类位置组成新的一条链,钦定放在末尾。这时我们从 \(i\) 个已有的 \(S\) 类位置中选一个,\(T\) 类位置同理,共 \(i^2\) 种选法。
    \(f(i - 1, j) \times i^2 \to f(i, j)\)
  2. 可以加入一个 \(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}\)。即

\[\sum_{k = 0}^q f(p, q - k)\times \dbinom{p}{k} \times (k!)^2\times \dbinom{m}{k}
\]

总时间复杂度 \(O(n^2)\)

Submission.


用组合结构刻画可以得到更优秀的复杂度。这里我们不妨钦定 \(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)!\) 种操作方案中只有一种是合法方案。可以写出

\[C(x) = \sum_{k \ge 0} k!\frac{1}{(k + 1)!} \frac{x^k}{k!} = \sum_{k\ge 0} \frac{x^k}{(k+1)!} = \frac{e^x - 1}{x}
\]

图中可以有任意多个用任意非 \(0\) 数量的 \(U\) 类节点组合的环。
对于长度(所有点数)为 \(k\) 的链,我们共有 \(\begin{bmatrix}k \\ 1\end{bmatrix} = (k - 1)!\) 种方式分配节点的标号,而且在 \(k\) 条边对应的 \(k!\) 种操作方案中每种都是是合法方案。可以写出

\[R(x) = \sum_{k\ge 1} (k - 1)! \frac{k!}{k!} \frac{x^k}{k!} = \sum_{k\ge 1} \frac{x^k}{k} = -\ln(1 - x)
\]

当然这个结论大概已被绝大多数人熟知,这里只是结合题目信息再次推导。

我们已经知道了图中共有 \(p\) 条链,同时确定了他们的起点和终点。链间有序,并且需要恰好取 \(p\) 个,因此作 \(p\) 次方的构造。环间无序,数量任意,因此作有标号 \(\text{Set}\) 构造。也就是

\[\left(\frac{e^x - 1}{x}\right)^p \exp(-\ln(1 - x)) = \frac{1}{1 - x} \left(\frac{e^x - 1}{x}\right)^p
\]

这里需要提取的就是 \(q\) 次项系数,因为有 \(q\) 个点是 \(U\) 类节点。答案就是

\[k!p!\left[ \frac{x^q}{q!} \right]\frac{1}{1 - x} \left(\frac{e^x - 1}{x}\right)^p
\]

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

Submission.



AGC019F

\(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}\)

答案就是

\[\max(n, m) + \frac{1}{2\binom{n + m}{n}}\sum_{i \ge 0} \dbinom{2i}{i}\dbinom{n + m - 2i}{n - i}
\]

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

Submission.