The 3rd Universal Cup. Stage 30: Northern

简单题:D G K

不难,注意实现细节:A E

观察与思考:F H L

毒瘤:B C I

【数据删除】:J

A

计算几何。每次询问重心。

E Fractal Maze

对于每一层上的查询 \(dis(A, B)\),记忆化一下,之前查找过直接返回。

处于同一个象限,直接进入这个象限。

处于不同象限:找出会经过的象限,拆成至多四个下一层询问,直接下去做。

预处理,每一种连接方式,每一种跨象限移动,依次经过的象限。直接 BFS。

当前第 \(n\) 层,假设对于 \(k \le n\),第 \(k - 1\) 层,已经处理了:

  • \(k\) 层中, 划分四个象限的位置,它们之间的距离。
  • \(k\) 层在第 \(k + 1\) 层中,被划分的位置的距离。

上面这些总共有常数个,那么在第 \(k\) 层的查询 \(dis(A, B)\),可以做到 \(O(k \log q)\),带 \(\log q\) 因为记忆化搜索的 map

\(O(qn \log q)\)

F Interactive Primality

这个 CRT 比较牛。

\(P = \text{Prime} \cap [2, 53]\),则 \(|P| = 16\)\(\prod_{p \in P} p > 10^{18}\)。若确定 \(\forall p \in P, x \bmod p\),则可唯一确定 \(x\)

不妨 \(53 \le y \le 10^{18}\),若已知 \((x + y) \in \text{Prime}\),则 \(\forall p \in P, x \not\equiv -y \pmod p\)

然后在 \(-x \bmod p\) 的候选项中把 \(y \bmod p\) 排除。

如果 \(-x \bmod p = t\) 确定,那么在随的时候不能随到 \(t\),否则在候选中随机。

G Jump the Frog

1900 matrices 基础矩阵乘法练习题,注意常数。

H Slot Machine

2900 bitmasks dp

\(n = 10^k\)

\(f(l, r)\)\([l, r]\),父亲是 \(l - 1\),的答案。\(g(l, r)\) 对应到父亲是 \(r + 1\)

\[f(l, r) = \min\limits_{l \le p \le r}\{\max(g(l, p - 1), f(p + 1, r)) + w(p, l - 1)\}\\ g(l, r) = \min\limits_{l \le p \le r}\{\max(g(l, p - 1), f(p + 1, r)) + w(p, r + 1)\}\\ \]

暴力可以 \(O(n^3)\)

确定 \(l\)\(f(l, r)\) 很小,且随 \(r\) 非严格单调增。\(g(l, r)\) 同理。

\(F(t, x)\) 表示左端点 \(x + 1\)\(f(x + 1, r) = t\) 的最大 \(r\)\(G(t, x)\) 表示右端点 \(x - 1\)\(g(l, x - 1) = t\) 的最小 \(l\)

\(t\) 小的转移到 \(t\) 大的。

当前 \(x\)\(y < x\) 转移,若 \(y \ge G(t - w(x, y), x) - 1\),则 \(F(t - w(x, y), x)\) 可以贡献到 \(y\)

当前 \(x\)\(y > x\) 转移,若 \(y \le F(t - w(x, y), x) + 1\),则 \(G(t - w(x, y), x)\) 可以转移到 \(y\)

枚举 \(x\)\(y\) 相同的位,得到对应的 \(w(x, y)\),扫描线一下,可以 \(O(nm2^k)\)

I Product

确定 \(a_0, a_1, \dots, a_{n - 1}\)\(a_n = n_0\),不妨 \(k \leftarrow k - 1\),那么答案:

\[\prod_{i=0}^{m-1}a_i\binom{k+a_{i+1}-a_i}k \]

我会 \(O(mn^2)\) DP。\(f(i, j)\) 表示当前 \(a_i = j\),计算了 \(a_0\)\(a_{i - 1}\) 的贡献时的答案。边界 \(f(0, j) = 1\)

\[f(i, j) = \sum_{1 \le p \le j}f(i - 1, p)p\binom{k+j-p}{k} \]

最终输出 DP 数组第 \(m\) 行。

\(F_i\) 为第 \(i\) 行的 OGF。则 \(F_i = F_{i-1}'x/(1-x)^{k+1}\)。直接跑 \(m\) 轮 NTT 可以 \(O(mn \log n)\)

然后不会了。

让我们取 \(x=Q^{-1}(y)\),对于某个 \(Q\)\(Q^{-1}\) 表示函数,使得 \(Q(Q^{-1}(x))=x\))。那么右边的公式是 \(P^{\prime}(Q(y))\frac{Q(y)}{(1-Q(y))^{k}}\)。但是 \(P(Q(y))^{\prime}=P^{\prime}(Q(y))Q^{\prime}(y)\)。取 \(Q\) 使得 \(yQ^{\prime}(y)=\frac{Q(y)}{(1-Q(y))^{k}}\),该操作将变成简单地将系数 \(i\) 乘以 \(i\)。这样的一个 $ Q $ 可以通过标准方法解微分方程找到。总的来说,我们将找到 $ Q^{-1} $,以简单的方式应用该操作 $ m $ 次并返回。人们已经学会了如何在 $ O(n\log^2 n) $ 时间内进行复合 https://codeforces.com/blog/entry/127674 https://codeforces.com/blog/entry/128204。总渐近复杂度为 $ O(n\log^2 n + n\log m) $。

J Generating Random Trees

【数据删除】

比较二度点的个数,运行 \(200\) 次求平均值。

DSU: 3241.460
Uniform: 3679.385

且 DSU 基本 \(\le 3350\),Uniform 基本 \(\ge 3600\)。实测可以通过。

K Vortex

Tree Hashing!

参考:树的同构 的线性做法,先找重心,然后进制哈希,用深度记当前位。

因为哈希过程中进行了一个排序,所以最后输出 DFS 序即可。

void dfs2(int x, int fa) {
	hsh[x] = dep[x] = dep[fa] + 1, siz[x] = 1;
	for (int y : son[x]) dfs2(y, x);
	sort(son[x].begin(), son[x].end(), [](int x, int y) { return hsh[x] < hsh[y]; });
	for (int y : son[x]) Fplus(hsh[x], (LL)hsh[y] * pw[siz[x]] % mod), siz[x] += siz[y];
}

L Random Sum

怎么还有 FFT?

\[[x^0]\prod_{i=1}^{n}(a_ix^{k_i}+b_i) \bmod (x^p-1) \]

暴力:对于每一种 \(k_i\),代换 \(y = x^{k_i}\),得到一些 \(\prod(a_iy+b_i)\),对每个 \(x^{k_i}\) 分治 FFT,然后用循环卷积合并。\(O(n\log^2 n+p^2\log p)\)

定理:确定 \(1 \le B \le p\),对于 \(k < p\),总有 \(1 \le t \le \lfloor p / B\rfloor\),满足要么 \(kt \bmod p \le B\),要么 \(-kt \bmod p \le B\)

证明:将 \([0, p)\) 分成 \(\lfloor p / B \rfloor\) 段,每段包含的整数个数 \(\le B + 1\)。把 \(\forall 0 \le a \le \lfloor p/B \rfloor, ka \bmod p\) 放进去。由抽屉原理:存在一段,两个数 \(a \ne b\) 得到的值都在段内。\(|(ka \bmod p) - (kb \bmod p)| \le B\),令 \(t = |a - b| \le \lfloor p/B \rfloor\),则 \(\min(kt \bmod p, -kt \bmod p) \le B\)

通过预处理可以对每个 \(k\) 找到满足条件的最小 \(t\)

\(x = y^t\)。则对于每个 \(t\),关于 \(y\) 的多项式,相乘的每项次数不会超过 \(B\)。在分治 FFT 的复杂度仍然可以接受的情况下,减少了不同的 \(t\) 的个数,达到平衡复杂度的效果。

  • \(kt \bmod p \le B\),则当前项 \(a_iy^{kt} + b_i\)
  • \(-kt \bmod p \le B\),当前项 \(a_iy^{kt}+b_i = y^{kt}(b_iy^{-kt}+a_i)\),额外记录循环移位部分,留下 \(b_iy^{-kt}+a_i\) 参与分治 FFT。

对每一种 \(t\),对关于 \(y\) 的多项式做分治 FFT (需要循环卷积),根据 \(y = x^{1/t}\),还原出关于 \(x\) 的多项式,然后乘进答案的多项式里。

时间复杂度 \(O(B n\log^2 n + p^2 \log p / B)\)\(B = 20\) 可以通过。

posted @ 2025-09-30 16:56  SZwinsun  阅读(24)  评论(0)    收藏  举报