2025.7.4 NOI 模拟赛 题解

T1《明天,我会死去,而你将重生》(jimi) \(\quad\) LOJ #6502. 「雅礼集训 2018 Day4」Divide

题意

给定 \(a_{1\sim n}\),将其划分为两个集合 \(S_1,S_2\),求出 \(\sum_{u\in S_1,v\in S_2}[u+v\ge m]\) 的最大值及达到最大值的方案数,\(n\le2000,m\le2\times10^6,a_i\le10^6\)

分析

显然 \(a\) 的顺序不影响答案,因此尝试重排 \(a\),使得对于每个 \(a_i\)\(\forall 1\le j<i\)\([a_j+a_i\ge m]\) 值都相等

设原序列为 \(a'\),重排后的为 \(a\),先将 \(a'\) 从小到大排序

\(a'_1+a'_n\ge m\),则 \(\forall i,a'_i+a'_n\ge m\),将 \(a'_n\) 放到 \(a\) 的最后一个位置,然后递归考虑 \(a'_{1\sim n-1}\)

否则 \(\forall i,a'_1+a'_i<m\),将 \(a'_1\) 放到 \(a\) 的最后一个位置,然后递归考虑 \(a'_{2\sim n}\)

容易 \(O(n\log n)\) 重排

然后在重排后的数组 \(a\)\(dp\),令 \(f_{i,j}\) 表示 \(a_{1\sim i}\) 划分为 \(A,B\),其中 \(|A|=j\)\(\sum_{u\in A,v\in B}[u+v\ge m]\) 的最大值(同时记录方案)

转移为

\[f_{0,0}\gets 0\\ f_{i,0}\gets f_{i-1,0}\\ f_{i,j}\gets \begin{cases} \max(f_{i-1,j-1}+(i-j),f_{i-1,j}+j) &\text{if}~{\forall 1\le j<i,a_i+a_j\ge m}\\ \max(f_{i-1,j-1},f_{i-1,j}) &\text{if}~{\forall 1\le j<i,a_i+a_j<m}\\ \end{cases} \]

答案为 \(\sum_j f_{n,j}\)

时间复杂度 \(O(n^2)\),空间复杂度容易做到 \(O(n)\)

代码

参考

T2 《只要长得可爱,即使是杀手你也喜欢吗》(hendrix) \(\quad\) LOJ #6516. 「雅礼集训 2018 Day11」进攻!

题意

给定一个 \(n\times m\)\(0/1\) 矩阵,从中依次选择 \(k\) 个矩形,满足选出的矩形中不含 \(0\),求所有 \(\left(\frac{n(n+1)m(m+1)}4\right)^k\) 种方案中,选出的矩形的交不为空的方案数,\(n,m\le2000\)

分析

\(c_{i,j}\) 表示枚举所有长为 \(i\),宽为 \(j\) 的子矩形,求出该矩形为选出的 \(k\) 个矩形并的子矩形的方案数,并求和

则答案为 \(c_{1,1}+c_{2,2}-c_{2,1}-c_{1,2}\),因为矩形并为长 \(h\)\(w\) 的矩形的方案在 \(c_{1,1}\) 中统计了 \(hw\) 次,在 \(c_{2,2}\) 中统计了 \((h-1)(w-1)\) 次,在 \(c_{2,1}\) 中统计了 \((h-1)w\) 次,在 \(c_{1,2}\) 中统计了 \(h(w-1)\) 次,计入答案 \(hw+(h-1)(w-1)-(h-1)w-h(w-1)=1\)

考虑如何求出一个 \(c_{lx,ly}\),其中 \(lx,ly\in\{1,2\}\)

\(cnt_{x,y}\) 表示不含 \(0\) 且包含矩形 \((x\sim x+lx-1,y\sim y+ly-1)\) 的矩形数量,则 \(c_{lx,ly}=\sum_{(x,y)}cnt_{x,y}^k\)

一个矩形 \((u\sim d,l\sim r)\) 会令 \(cnt_{u\sim d-lx+1,l\sim r-ly+1}\) 加一,令 \(cnt'\)\(cnt\) 的二维差分数组,则会令 \(cnt'_{u,l}\)\(cnt'_{d-lx+2,r-ly+2}\) 加一,\(cnt'_{u,r-ly+2},cnt'_{d-lx+2,l}\) 减一

得到 \(cnt'\) 后容易得到 \(cnt\),一个矩形对 \(cnt'\) 的四种影响计算方式类似,以下每个合法矩形 \((u\sim d,l\sim r)\)\(cnt'_{u,l}\) 加一

预处理 \(dw_{x,y}\) 表示从 \((x,y)\) 向下至多经过的连续黑色格子数量,容易 \(O(nm)\) 预处理

枚举 \(u\),从右向左枚举 \(l\),维护一个栈,栈中依次保存 \(dw_{u,l},\min(dw_{u,l},dw_{u,l+1}),\min(dw_{u,l},dw_{u,l+1},dw_{u,l+2}),\cdots\),则对 \(cnt'\) 的增量为目前为止栈中值的总和

分段维护栈中的值,容易 \(O(nm)\) 求出 \(cnt'\)

总时间复杂度 \(O(nm\log k)\)

代码

T3 《爱好赌球的少年与被夺去的壹佰元》(experience) \(\quad\) LOJ #6518. 「雅礼集训 2018 Day11」序列

比赛结果

\(30+50+30\)\(\text{rk}6\)

posted @ 2025-07-05 10:18  Hstry  阅读(35)  评论(0)    收藏  举报