AGC046B
MurataHimeko · · 题解
我们先不管去重。
设
转移时枚举上一步是放行还是放列:
但是发现会算重。
冷静分析一下,会算重的原因是,如果第
最终转移式即为:
注意一下边界。
总复杂度为
代码:
f[x][y] = 1;
re(i, n) {
re(j, m) {
if(i == x && j == y) continue;
if(i == x) f[i][j] = 1ll * f[i][j-1] * i % mod;
else if(j == y) f[i][j] = 1ll * f[i-1][j] * j % mod;
else {
f[i][j] = (1ll * f[i-1][j] * j % mod + 1ll * f[i][j-1] * i % mod) % mod;
f[i][j] = (f[i][j] + mod - 1ll * f[i-1][j-1] * (i-1) % mod * (j-1) % mod) % mod;
}
}
}