10.7 模拟赛
2025--炼石计划-- 10 月 04 日 --NOIP 模拟赛 #8【订正】 - 比赛 - 梦熊联盟 (mna.wang)
复盘
T1 看上去不难。一开始以为枚举 \(a, b\),然后考虑平方差。于是想出了 这道题 的解法。但是转化不过去。后来发现因为 \(k\) 很小直接暴力预处理就行。30min 左右过大样例。
T2 一眼不会。想到了 P1521 求逆序对 但还是不会做。
T3, T4 显然不可做。有了前几场的经验,先把所有特殊性质+暴力分打了。不到 11:00 算得分 \(100+26+36+44\)。
对拍 T1 + T3 基环树。
剩下时间都在想 T2 的状压 DP。然后 T4 做了个随机的 \(20\) 部分分。
离场。最终 \(100+26+(20,36)+40 = 204\)。T3 最开始交错了代码。T4 因为没有兼容 Sub2,3 导致 Sub2 全挂。
补题 \(100+100+56+64 = 320\)。
总结
好的:
- 基环树写对了。
- 提前打简单的暴力/特殊性质分的时间。
不足:
- subtask 分类出错(老毛病)
题解
A. Sing Alive
枚举 \(c, d\)。问题变成求有多少 \(a, b\) 满足 \(a^2+b^2=d^2+k-c^2\)。注意到 \(a, b \le n \le 2000\) 所以暴力预处理即可。时间复杂度 \(\mathcal O(n^2)\)。
这个题没有难度。说一下赛时想到的另一个题 U488066 Sing Alive 2。这里省去了枚举 \(a, b\) 一步,但是 \(k\) 变大,且 \(c, d\) 少去了 \(\le n\) 的限制。
首先平方差 \((c-d)(c+d)=k\)。
这两个东西一定都是 \(k\) 的约数。我们设 \(c-d=x\)(\(x \mid k\)),那么另一个一定可以表示成 \(\dfrac kx\)。因为 \(c-d \le c+d\) 所以我们强制要求 \(x \le \dfrac kx\)。
显然一个 \(x\) 可以唯一对应一个正整数对 \((x, \dfrac kx)\)。但是这样的正整数对 \((x, \dfrac kx)\) 能对应几个 \((c, d)\) 呢?即,哪些 \(c, d\) 满足 \(c - d = x, c + d = \dfrac kx\)?
解这个方程组得 \(c=\dfrac 12 (x+\dfrac kx),d=x-\dfrac 12 (x+\dfrac kx)\)。但是 \(c, d\) 都需要是整数,所以这组解存在的条件是 \(x \equiv \dfrac kx \pmod 2\)。
所以,\(x\) 唯一对应 \((x,\dfrac kx)\),而 \((x,\dfrac kx)\) 如果满足 \(x \equiv \dfrac kx \pmod 2\) 可以唯一确定 \((c, d)\)。
换句话说,现在问题变成了:求有多少 \(k\) 的约数 \(x\) 满足 \(x \equiv \dfrac kx \pmod 2\)。
分类讨论:
- \(k\) 为奇数:那么任意 \(x\) 都是奇数,\(\dfrac kx\) 一定也是奇数,即 \(x \equiv \dfrac kx \equiv 1 \pmod 2\)。所以答案为 \(\left \lceil \dfrac {D(k)}2 \right \rceil\)。其中 \(D(i)\) 表示 \(i\) 的约数个数。除以 \(2\) 的原因是我们要保证 \(x \le \dfrac kx\)。
- \(k\) 为偶数:设 \(k = 2k_0\)。那么 \(x \equiv \dfrac kx \equiv 1 \pmod 2\) 显然不合法。所以 \(k, \dfrac kx\) 都需要是偶数。设 \(k = 2k_1, \dfrac kx = 2k_2\),则原式为 \(2k_0=2k_1\times 2k_2\),即 \(\dfrac{k_0}2=k_1k_2\)。其中如果 \(k_0 \not \equiv 0 \pmod 2\) 则无解。此时我们对 \(k_1,k_2\) 的奇偶性没有要求。于是答案是 \(\left \lceil \dfrac {D(k/4)}2 \right \rceil\)。
B. Neo Aspect
我们只需要关心所有满足 \(s_i= 0, s_j=1,i<j\) 的位置。即,这些位置必须满足 \(p_i < p_j\),且不对其它任何对做限制。
若 \(s_j = 1\) 且我们确定了 \(p_j\),那么我们只需要关心满足 \(s_i=0\) 的 \(p_i\)(\(i < j\))的最大值。如果这个最大的 \(p_i\) 是满足 \(p_i < p_j\) 的,那么在这一位上就合法。
所以可以考虑类似 P1521 求逆序对 的 DP 了。设 \(f(i, j)\) 表示在前 \(i\) 个位置填 \(1 \sim i\),且满足最大的 \(s_k = 0\) 的 \(p_k\) 恰好为 \(j\) 时的方案数。特别的,若不存在 \(s_k = 0\) 则 \(j = 0\)。
考虑从 \(f(i-1)\) 转移 $f(i)。分类讨论 \(s_i\):
-
\(s_i = 1\):那么 \(p_i\) 只需要满足 \(> j\) 即可。
\[f(i, j) = f(i - 1, j) \times (i - j) \] -
\(s_i = 0\):显然这一位的值需要 \(\le j\)。若 \(= j\),那么我们应该为前面的位重新选一个最大值,枚举即可;若 \(< j\),也就是说最大值是在前面出现的,方案数是 \(j - 1\)。因为这一位的值比 \(j\) 小,所以当从 \(1 \sim i\) 变成 \(1 \sim i - 1\) 时,\(j\) 的排名会减少 \(1\)。
\[f(i, j) = \sum_{k=0}^{j-1} f(i-1,k) + (j - 1) \times f(i-1,j-1) \]
第二种转移显然可以前缀和优化。
初始条件 \(f(0, 0) = 1\),答案 \(\sum _{i=0}^n f(n, i)\)。时间复杂度 \(\mathcal O(n^2)\)。
C. Oneness
最后一步看不懂了。先写前面的。
\(L = R = 1\) 是 Planets Queries II。设答案为 \(dis\),即 \(s \rightsquigarrow t\) 的距离为 \(dis\)。
注意到 \(f_{k, i}\) 相当于在基环树上从 \(i\) 开始走 \(k\) 步。因为 \(k \in [L, R]\) 所以可以走 \([L, R]\) 中任意步。
对于 \(L = 1\) 的问:肯定是贪心走大步,即走 \(R\)。因为 \(L\) 取到了下界,所以走 \(R\) 后剩下的一定可以通过走 \([L, R)\) 中的小步到达。所以答案就是 \(\lceil dis/ R \rceil\)。
普遍的,问题变成了求 \((R-L+1)\) 原方程,使得 \(\sum_{i=L}^R i \times x_i = dis\) 且 \(\sum_{i=L}^R x_i\) 最小。
然后不会了。