若 a_i = a_{i - 1},无事发生,多了第 i 行和列没被占用,因此 t \gets t + 1。
若 a_i - a_{i - 1} = 1,相当于可以在 (1, i) \sim (i - 1, i) 和 (i, 1) \sim (i, i - 1) 中还没被占用的格子放车,同时也可以在 (i, i) 放车,那么 ans \gets ans \times (2t + 1),t 不变。
若 a_i - a_{i - 1} = 2,(1, i) \sim (i - 1, i) 和 (i, 1) \sim (i, i - 1) 中还没被占用的格子各放一个车,那么 ans \gets ans \times t^2,然后 t \gets t - 1。
如上讨论可以通过 F1。
F2 我们继续将其放到棋盘上考虑。考虑一个 a_i \ne -1 的位置 i,设它上一个 a_j \ne -1 的位置是 j。现在相当于求在 y \times y 的左下角抠掉了 x \times x 的一块的“L”字形棋盘放 t 个互不攻击的车的方案数,其中 x = j - a_j, y = i - a_j, t = a_i - a_j。每个这样的“L”字形互相独立,所以可以直接把方案乘起来。
上面的问题可以考虑容斥(我现在还不会不容斥的做法?)。相当于在左下角 x \times x 的区域不能放车,那么我钦定 i 个车放在了左下角,设 F(n, m) 为 n \times n 的棋盘放 m 个互不攻击的车的方案数,那么这部分的方案为 F(x, i) \times F(y - i, t - i),容斥系数为 (-1)^i,因此结果为:
\sum\limits_{i = 0}^t (-1)^i F(x, i) F(y - i, t - i)
最后一个问题是求 F(n, m)。考虑先选 m 行放车,有 \frac{n!}{(n - m)!} 种选列的方案,那么 F(n, m) = \binom{n}{m} \times \frac{n!}{(n - m)!}。