2025.4.27 NOI 模拟赛 题解
T1 NFLS #P10179. 良盒
题意
给定 \(n\) 个二元组 \((s,p)\),对于每个 \(1\le k\le\lfloor\frac n2\rfloor\),从 \(n\) 个二元组中选出 \(k\) 对,其中一对 \(((s_1,p_1),(s_2,p_2))\) 的权值为 \(p_1-p_2\),其中 \(s_1\ge s_2\),求出 \(k\) 对权值和的最大值,\(n\le2\times10^5\)
分析
模拟费用流
先把二元组按 \(s\) 从小到大排序,建立 \(n\) 个点,\(S\) 向 \(i\) 连容量 \(1\) 费用 \(-p_i\) 的边,\(i\) 向 \(T\) 连容量 \(1\) 费用 \(p_i\) 的边,\(i\) 向 \(i+1\) 连容量 \(\infty\) 费用 \(0\) 的边,若 \(s_i=s_{i+1}\) 则 \(i+1\) 向 \(i\) 连容量 \(\infty\) 费用 \(0\) 的边
转化为类似 P4694 [PA 2013] Raper 中的形式,线段树优化到 \(O(n\log n)\)
T2 NFLS #P23434. 快来做这个题!!! \(\quad\) CF804F Fake bullions
题意
给定一张 \(n\) 点的竞赛图,点 \(i\) 上有 \(s_i\) 个人,编号 \((i,0\sim s_i-1)\),初始已知一部分人有物体 \(X\),若存在边 \(u\to v\) 且 \(k\) 时刻 \((u,k\bmod s_u)\) 有物体,则下一时刻 \((v,k\bmod s_v)\) 会得到物体 \(Y\),每个人只会保留第一个得到的物体。令极长时间后点 \(i\) 上有 \(mn_i\) 个人保留了物体 \(X\),有 \(mx_i\) 个人有物体,存在 \(c_{1\sim n}\) 满足 \(mn_i\le c_i\le mx_i\),将 \(c\) 从大到小排序,从前 \(A\) 大中选择 \(B\) 个,求可能的选出的下标集合的数量,\(n\le5000,\sum_i s_i\le2\times10^6\)
分析
显然问题可以拆分为两部分,求出 \(mx\) 和求出最终答案(\(mn\) 容易求)
令 \(f_{i,j}\in\{0,1\}\) 表示 \((i,j)\) 这个人最终能否得到物体
若 \(u\to v\),则可证若 \(f_{u,x}=1\) 则对于所有 \(x\equiv y\pmod{\gcd(s_u,s_v)}\) 有 \(f_{v,y}=1\)
可证对于一个 \(\text{SCC}\),设其中的 \(s\) 的 \(\gcd\) 和为 \(g\),则对于其中任意两个点 \(u,v\),若 \(f_{u,x}=1\) 则对于任意 \(x\equiv y\pmod g\),有 \(f_{v,y}=1\)
可证若竞赛图为链状物,假设 \(i\to j\) 当且仅当 \(i<j\),则只需要考虑 \(i\to i+1\) 的边
先用兰道定理求出图的 \(\text{SCC}\),缩点后得到链状物,分别应用两条结论求出答案,容易 \(O(n^2+\sum s_i)\) 得到 \(mx\)
然后考虑如何求出答案
对于一种选择方式,要使选择的 \(b\) 个点最靠前,显然这 \(a\) 个选择 \(mx\),其余选择 \(mn\) 最优
枚举 \(i\) 为选出的 \(b\) 个点中 \(c\) 最小的一个,若 \(c\) 相同则比较下标
令 \(x\) 为 \((mx_i,i)<(mx_j,j)\) 的 \(j\) 的数量,除 \(i\) 外这 \(x\) 个可以在被选的 \(b\) 个中,\(X\) 代表其集合
令 \(y\) 为 \(mn_j>mx_i\) 的数量,这 \(y\) 个必然在可以被选的 \(b\) 个中,\(Y\) 代表其集合,显然 \(Y\subseteq X\)
这个 \(i\) 的贡献为
其中 \(j\) 枚举了 \(X/(Y\cup\{i\})\) 中选择的数量
总时间复杂度 \(O(n^2+\sum s_i)\)
T3 NFLS #18147. KnapsackCryptosystem \(\quad\) P6962 [NEERC 2017] Knapsack Cryptosystem
题意
给定 \(n\) 个数 \(a_{1\sim n}\) 和正整数 \(em\),求出 \(a\) 的一个子集满足和 \(\bmod 2^{64}\) 为 \(em\),\(n\le64,0\le a_i,em<2^{64}\),保证有解,其中数据生成方式为先选出 \(b_{1\sim n}\),满足 \(\sum b_i\le2^{64}\) 且 \(\forall i,\sum_{j=1}^{i-1}b_j<b_i\),然后选择 \(r\equiv 1\pmod 2\),令 \(a_i=(r\times b_i)\bmod 2^{64}\),然后选择它的一个子集,令 \(em\) 为子集和
分析
当 \(n\le42\) 时容易 \(\text{Meet in the Middle}\) 做到 \(O(n2^{\frac n2})\)
当 \(n>42\) 时,由于 \(\sum b_i\le 2^{64}\),因此 \(b_1\le \frac{2^{64}}{2^n-1}\),又因为 \(r\) 为奇数,因此 \(b_1\) 和 \(a_1\) 的 ctz 相同,令其为 \(cnt\)
因此 \(b_1\) 的选择只有 \(\left\lfloor\frac{\frac{2^{64}}{(2^n-1)2^{cnt}}+1}2\right\rfloor\) 种,枚举之
\(a_1\equiv r_1\times b_1\pmod {2^{64}}\),而 \(a_1,b_1\) 都是 \(2^{cnt}\) 的倍数,因此
可以得到 \(r^{-1}\) 的低 \(64-cnt\) 位
然后枚举 \(r^{-1}\) 的高 \(cnt\) 位,\(O(n)\) 验证之即可
时间复杂度 \(O(\min(n2^{\frac n2},{\frac{2^{64}}{(2^n-1)2^{cnt+1}}}\times 2^{cnt}\times n))=O(\min(n2^{\frac n2},{\frac{2^{63}}{2^n}}\times n))\),当 \(n\le 42\) 时取前者,\(n>42\) 时取后者可以做到 \(O(n2^k)\),其中 \(k\le21\)
比赛结果
\(100+0+38\),\(\text{rk}21\)

浙公网安备 33010602011771号