Loading

省选训练赛 #11 记录

个人认为 B 和 C 质量都很高。

B

一个数轴上有 \(n\) 个炸弹,第 \(i\) 个炸弹位于 \(X_i\),爆炸半径为 \(R_i\),权值为 \(v_i\),这些炸弹的排布有两个性质:

  • 若炸弹 \(x\) 可以直接或间接引爆炸弹 \(y\),那么 \(y\) 一定不能直接或间接引爆炸弹 \(x\)

  • 定义炸弹序列 \(a_1, a_2, \dots, a_k\) 要求 \(\forall i\in [1, k - 1]\),炸弹 \(a_i\) 可以引爆 \(a_{i + 1}\)。令 \(d(x, y)\) 为最大的 \(k\) 满足存在炸弹序列 \(a_1, a_2, \dots, a_k\)\(a_1 = x, \ a_k = y\)。若 \(d(x, y) = 3\),则 \(x\) 一定可以直接引爆 \(y\)

对于每个炸弹 \(i(1\le i\le n)\),求对于所有的炸弹序列 \(a_1, a_2, \dots, a_k\) 满足 \(a_k = i\),其 \(\sum\limits_{j = 1} ^ {k - 1} f(v_{a_j}, v_{a_{j + 1}})\) 的最大值,其中 \(f(u, v) = ((u\oplus v) + u\cdot v) \bmod 998244353\)

\(1\le n\le 3\times 10^5, \ 0\le R_i\le 10^{18}, \ |X_i|\le 10^{18}\)

对于这种题,其代价函数 \(f(u, v)\) 几乎无法拆开,而且可能的转移数量为 \(\mathcal O(n ^ 2)\),那么算法几乎无法得到优化。

所以,关键点在于转移数量可能并不是 \(\mathcal O(n ^ 2)\)

  • Lemma:对于炸弹 \(x\),对于任意 \(k\ge 2\),炸弹 \(x\) 右边的满足 \(d(x, y) = k\) 的炸弹 \(y\) 至多一个。
Proof

反证。若存在 \(x, y, z\) 满足 \(X_x < X_y < X_z\)\(d(x, y) = d(x, z) = k\)

在炸弹 \(z\) 一路引爆到炸弹 \(x\) 的过程中同时会引爆炸弹 \(y\),那么 \(d(x, z) > d(x, y)\),矛盾。

  • Theorem\(\max\limits_{1\le x < y\le n} d(x, y) \le \mathcal O(\log R)\)
Proof

考虑对于三个炸弹 \(x, y, z\) 满足 \(X_x < X_y < X_z\),若 \(z\) 可以直接引爆 \(y\)\(y\) 可以直接引爆 \(x\)

由炸弹排布性质,\(z\) 可以直接引爆 \(x\)

可得 \(X_y - X_x\le R_y,\ X_z - X_x\le R_z\)

又知 \(y\) 不能引爆 \(z\)\(x\) 不能引爆 \(y\),那么 \(R_x < X_y - X_x, \ R_y < X_z - X_y\)

所以 \(X_y - X_x \le R_y < X_z - X_y\),所以 \(R_x < X_y - X_x < \frac {X_z - X_x} 2 \le \frac {R_z} 2\)

所以每引爆两个炸弹,半径至少减半,所以 \(d(x, y)\)\(\mathcal O(\log R)\) 级别。

进一步可得转移数目为 \(\mathcal O(n\log R)\),直接 DP 即可。

启示:这道题的关键在于观察转移贡献的特殊性从而对转移数目入手,从题目给出的性质入手推出更多的引理和定理。

C

一张边权为 \(0/1\) 的有向图,你需要给每个点分配 \(\mathtt {A,B,C,D}\) 四种类型中的一种。设 \(s_i\) 表示点 \(i\) 的种类,满足对于每条边 \((u, v, w)\),都有 \(w = [(s_u, s_v) \in \{ (\mathtt A,\mathtt B),(\mathtt A,\mathtt D),(\mathtt B,\mathtt A),(\mathtt B,\mathtt D),(\mathtt C,\mathtt A),(\mathtt C,\mathtt B),(\mathtt C,\mathtt D)\}]\)。你需要构造任意一种方案,或报告无解。

\(1\le n\le 10^5, \ 1\le m\le 4\times 10^5\)

统一信息化:将 \(\mathtt {A,B,C,D}\) 分别视为 \(01,10,11,00\),那么条件等价于 \(s_u\) 是否有一位比 \(s_v\) 大,边权是则为 \(1\),否则为 \(0\)

\(a_i, b_i\) 表示 \(s_i\) 第一位和第二位的取值,我们可以构造 2-sat。

  • \(w = 0\) 时:

    • \(a_u = 1 \Rightarrow a_v = 1, \ a_v = 0 \Rightarrow a_u = 0\)
    • \(b_u = 1 \Rightarrow b_v = 1, \ b_v = 0 \Rightarrow b_u = 0\)
  • \(w = 1\) 时:

    • \(a_u = 0 \Rightarrow b_u = 1, \ b_u = 0 \Rightarrow a_u = 1\)
    • \(a_v = 1 \Rightarrow b_v = 0, \ b_v = 1 \Rightarrow a_v = 0\)
    • \(a_u = 0 \Rightarrow b_v = 0, \ b_v = 1 \Rightarrow a_u = 1\)
    • \(b_u = 0 \Rightarrow a_v = 0, \ a_v = 1 \Rightarrow b_u = 1\)
  • 启示:2-sat 也是一种构造方法;将构造的条件和对象统一信息化,转化为一种简易的信息。

posted @ 2024-12-27 16:42  Lgx_Q  阅读(4)  评论(0编辑  收藏  举报