qoj 3300 Cactus Competition 题解

先考虑发掘一下这个图的性质,我们考虑如果 \((i, j)\) 可走,\((i + 1, j)\) 不能走,\((i, j + 1)\) 不能走

那么我们可以推出:

\[\begin{array}{c} a_{i} + b_{j} \ge 0 \Rightarrow a_i \ge -b_j \\ a_{i + 1} + b_{j} < 0 \Rightarrow a_{i + 1} < -b_{j} \\ \Rightarrow a_{i} > a_{i + 1} \\ a_{i} + b_{j + 1} < 0 \Rightarrow a_{i} < -b_{j + 1} \\ \Rightarrow a_{i + 1} + b_{j + 1} \ge 0 \end{array} \]

因此 \((i + 1, j + 1)\) 不能走

我们推广一下,如果 \(\exists (i, j), a_i + b_j \ge 0, (i, j + k), a_i + b_{j + k} \ge 0\),则 \(\forall (i, x)\),若 \(a_i + b_x < 0\),那么 \(a_i + b_{x + k} < 0\),即 \((i, x + k)\) 不能走

列的性质同理

现在发现了图的性质,现在我们考虑计数,直接计数并不容易,我们考虑去算不合法的数量

记起点是 \((s, 1)\),终点是 \((t, m)\)

我们先把起点和终点被围住的条件去掉,剩下的情况,就只有竖着走不过去或横着走不过去

我们就考虑横着走不过去,因为有上面的性质,所以我们可以将所有横着不能走的格子放到一行,那么肯定就存在一行不能走

同理列不能走过去也是有一列不能走

总结一下,如果起点不能到终点,必然满足以下的条件中的一条:

  • \(\exists (i, j), \forall y \in [1, j], a_i + b_y < 0, \forall x \in [s, i], a_x + b_j < 0\)
  • \(\exists (i, j), \forall y \in [j, m], a_i + b_y < 0, \forall x \in [i, t], a_x + b_j < 0\)
  • \(\exists x \in [s, t], \forall y \in [1, m], a_x + b_y < 0\)
  • \(\exists y \in [1, m], \forall x \in [s, t], a_x + b_y < 0\)
    现在考虑它的必要性,根据之前图的性质,可以很简单证明出来它的必要性

现在我们来计数,先翻译一下条件

\(\exists (i, j), \forall y \in [1, j], a_i + b_y < 0, \forall x \in [k, i], a_x + b_j < 0\),则 \(s \in [k, i]\) 时不行
\(\exists (i, j), \forall y \in [j, m], a_i + b_y < 0, \forall x \in [i, k], a_x + b_j < 0\),则 \(t \in [i, k]\) 时不行
\(\exists x, \forall y \in [1, m], a_x + b_y < 0\),则 \(s \in [1, x], t \in [x, n]\) 时不行
\(\exists y, \forall x \in [l, r], a_x + b_y < 0\),,则 \(s \in[l, r], t \in [l, r]\) 时不行

直接算可能会算重,此时我们上一个扫描线求面积并就行了,注意 \(s \le t\),我们不是求所有的面积并

posted @ 2025-05-27 15:01  Z_drj  阅读(31)  评论(0)    收藏  举报