qoj 3300 Cactus Competition 题解
先考虑发掘一下这个图的性质,我们考虑如果 \((i, j)\) 可走,\((i + 1, j)\) 不能走,\((i, j + 1)\) 不能走
那么我们可以推出:
因此 \((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\),我们不是求所有的面积并

浙公网安备 33010602011771号