【题解】AT_code_festival_2017_quala_e Modern Painting

https://www.luogu.com.cn/problem/AT_code_festival_2017_quala_e

一定有某个方向是被一个人贯穿的。不妨假设这个方向是竖着的,那么算完后转置再做一次。
那么可以按照这个分割线切开,变成只有三个方向有人。以此类推最后只剩下一个方向有人。
分别讨论这些的方案数。

  • 一个方向:显然他们只能一直走到头。方案数是 1。
  • 两个方向:假设两个方向分别有 \(a,b\) 个人。如果我们选择一个人走到头,那么被他挡住的人也必须走到头。那么就是归并,答案为 \(\binom{a+b}{a}\)
  • 三个方向:假设中间方向有 \(c\) 个人,两边方向分别有 \(a,b\) 个人。那么方案数是 \(\sum_{i+j<c} \binom{i+a-1}{a-1}\binom{j+b-1}{b-1}\)。注意这里 \(a,b\) 要减一,换方向后是强制先走另一个方向的人的。
    \(\sum_{i}\binom{i+a-1}{a-1}\sum_{j=0}^{c-i-1}\binom{j+b-1}{b-1}=\sum_{i} \binom{i+a-1}{a-1}\binom{c-i-1+b}{b}=\binom{a+b+c-1}{a+b}\)

回到原问题,那么就是选择两个竖着的人,他们中间的人是确定的,然后旁边两侧就是三个方向,容易 \(O(n)\) 维护。
注意:

  • 两个人对撞方案数是 2。
  • 没有人的时候方案数是 1。
  • 三个方向时中间没有人时要求两侧也没有人才是 1。
posted @ 2026-05-23 13:46  TallBanana  阅读(6)  评论(0)    收藏  举报