抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

比赛地址

ABC 就不写了。

D - Double Landscape

题意

在一个 N×MN\times M 的网格中不重复地填入 11N×MN\times M 的整数,使得第 ii 行的最大值为 AiA_i,第 jj 列的最大值为 BjB_j,求方案数。对 109+710^9+7 取模。

N,M1000N,M\le 1000

题解

A,BA,B 从小到大排序,显然不影响答案。

从大到小填数,分为若干种情况:

  • 若当前数是超过两行或超过两列的最大值,则一定无解。
  • 若当前数是恰好一行和一列的最大值,则必然填在交界处。
  • 若当前数是恰好一行或恰好一列的最大值,则必然填在该行或该列。
  • 否则,该数可以填在最大值大于等于当前数的任意位置。

时间复杂度 O(NM)O(NM)

代码

E - Connecting Cities

题意

有一张 NN 个点的无向完全图,第 ii 个点有点权 AiA_i。定义一条边 (i,j)(i,j) 的边权为 ij×D+Ai+Aj|i-j|\times D+A_i+A_j。求最小生成树权值。

N2×105N\le 2\times 10^5

题解

直接套用 Boruvka 算法。

每次合并时,对于每个点 ii,可以对 j<ij < ij>ij > i 两种情况分别求出不在同一连通块的最小边。

只需要正反扫一遍,维护最小值和与最小值不在同一连通块的最小值即可。

时间复杂度 O(Nα(N)logN)O(N\alpha(N)\log N)

代码

F - Paper Cutting

题意

有一个 (H+1)×(W+1)(H+1)\times (W+1) 的网格,有 HH 条水平线和 WW 条垂直线。

你需要执行 KK 次操作,每次沿一条水平线或垂直线将网格切开。定义一次操作的权值为做完该操作后网格被分成的块数。

定义一个操作序列的权值为 KK 次操作的权值和。

求所有操作序列的权值之和。对 109+710^9+7 取模。

H,W107H,W\le 10^7

题解

考虑求出第 kk 次操作对答案的贡献,为 k!(Kk)!(H+WkKk)i=0k(Hi)(Wki)(i+1)(ki+1)k!(K-k)!\binom{H+W-k}{K-k}\sum_{i=0}^{k}\binom{H}{i}\binom{W}{k-i}(i+1)(k-i+1)

考虑优化后面部分,有 i=0k(Hi)(Wki)(i+1)(ki+1)= (k+1)i=0k(Hi)(Wki)+i=0ki(ki)(Hi)(Wki)= (k+1)(H+Wk)+HW(H+W2k2) \begin{aligned} & \sum_{i=0}^{k}\binom{H}{i}\binom{W}{k-i}(i+1)(k-i+1) \\ =~&(k+1)\sum_{i=0}^{k}\binom{H}{i}\binom{W}{k-i}+\sum_{i=0}^{k}i(k-i)\binom{H}{i}\binom{W}{k-i}\\ =~&(k+1)\binom{H+W}{k}+HW\binom{H+W-2}{k-2} \end{aligned}

时间复杂度 O(H+W)O(H+W)

代码

评论