AGC018E [* hard]
给你三个矩形。
三个矩形从左下到右上排开。矩形顶点坐标范围是1e6
(X,Y) 依次升序排序。
在三个矩形内先分别选一个点出来,构成 S, T, P,求从 S 走到 T 走到 P 的方案数。
对于所有选点方案,求和。
(X,Yle 10^6)
( m Sol:)
稍微看了一下下题解,感觉非常仙。
点到点的方案数
(inom{x+y}{x})
枚举点,(mathcal O(N^6))
点到矩形的方案数
即:
[egin{aligned}
&sum_{j=y_1}^{y_2}sum_{i=x_1}^{x_2} inom{i+j}{j}
\&=sum_{j=y_1}^{y_2}sum_{k=x_1+j}^{x_2+j} inom{k}{j}
\&=sum_{j=y_1}^{y_2} igg( inom{x_2+j+1}{j+1}-inom{x_1+j}{j+1}igg )
\&=sum_{j=y_1}^{y_2}inom{x_2+j+1}{x_2}-sum_{j=y_1}^{y_2} inom{x_1+j}{x_1-1}
\&=inom{x_2+y_2+2}{x_2+1}-inom{x_2+y_1+1}{x_2+1}-inom{x_1+y_2+1}{x_1}-inom{x_1+y_1}{x_1}
end{aligned}]
不难发现点走到矩形的方案数等同于点走到 ((x_2+1,y_2+1),(x_2+1,y_1),(x_1,y_2+1),(x_1,y_1)) 的方案数之差。
枚举 S 和 T,复杂度为 (mathcal O(N^4))
枚举 T,然后分别算,复杂度为 (mathcal O(N^2))
矩形到矩形
注意到对于第一个矩形的每个点现在等同于 (4) 的点的差分的组合,于是我们只需要考虑那 (4) 个点走到矩形的方案数,大概是可以通过 (16) 个点来表示答案。
从矩形出发,经过矩形,到达另一个矩形
等价于从这 (16) 个点出发,且路径经过了那个矩形的方案数。
注意到进入点是 (mathcal O(N)) 的,所以枚举进入点即可。
复杂度 (mathcal O(16N))
本题
然而在第二个矩形中走的路径长度会影响答案。
假设走的长度为 ( m len),那么对答案的贡献为 ( m len)
假设从 ((x_1,y_1)) 进入,从 ((x_2,y_2)) 出去,那么对答案的贡献是 ((x_2+y_2)-(x_1+y_1))
等一下,好像维度可以分离?!
枚举进入点,枚举出去点,分别算贡献即可,复杂度 (mathcal O(16 imes 4 imes n)),大概是 (mathcal O(64n))