10.6 模拟赛(NOIP 模拟赛 #9)
2025--炼石计划-- 10 月 05 日 --NOIP 模拟赛 #9【订正】 - 比赛 - 梦熊联盟 (mna.wang)
复盘
T1 一眼不会。直接二分肯定没有单调性。先打了 \(64\) 分暴力。
T2 刚开始没看懂题。看懂后发现只因数只有 \(4 \times 10^5\) 个,直接 DP 就行。
但是 DP 复杂度炸了。先放弃。但是一眼秒了 \(n \le 9\)。
T3 不是之前没补的模拟赛 T4?好像不是。
T4 一点看不懂。
做 T1。感觉二分好像是有单调性的。快速写了份代码过了大样例。
思考后发现一定是有单调性的。
测了组极限数据用了 \(8\) 秒。原因是内层有个 sort
的 \(\log\) 很慢。但是好像优化不掉。
一通神奇卡常后卡到了 \(1.2\) 秒。仍然过不了,但已经是极限了。放弃。这样应该有 \(90\)。
猜测 T2 直接贪心从大到小取一定能取完且合法。事实确实是这样的,虽然不是 sol 的做法。过了样例。应该不会错。
最后拼手速打了 T3,T4 的特殊性质。没全拿到,但是也不少。
\(30+60+10+36=136\),炸了。T1 挂在了 __int128,T2 T 了因为枚举的方式不对。
补了 T1, T2。
总结
好的:
- 卡常能力很强。
不足:
- 没有算好数据范围。
- 特殊性质没打完。以后应该将特殊性质的时间放在比赛前半段。
知识点
- T1:数学,二分,STL 的 nth_element。
- T2:搜索。
题解
A. 最棒的玩具销售员
当 \(k_i \le 0\) 时,方程的最大值会在 \(x = 0\) 时取到。
当 \(k_i \ge 0\) 时,显然可以二分。
如果既有 \(k_i \le 0\) 又有 \(k_j \ge 0\)。注意到答案有单调性(证明?),因此二分答案 \(x\)。求出 \(y_i = k_ix + b_i\) 后,问题变成了要在 \(y\) 中选择 \(m\) 个数且和最大。
直接 sort
会 T。可以使用线性的 nth_element
。总时间复杂度 \(\mathcal O(n \log n)\)。
B. 只因数分解
一个只因数一定是 \(n!\) 的约数。虽然不知道这一点也能做。
注意到只因数最多有 \(4\times 10^4\) 个(\(20!\) 有这么多个约数)。我们将这四万个数预处理。
考虑计算答案。可以证明从最大的只因数开始贪心凑 \(n\) 一定合法且数量 \(\le n\)。
注意凑 \(n\) 的时候用二分优化。复杂度 \(\mathcal O(Tn\log d(n!))\),其中 \(d(i)\) 表示 \(i\) 的约数。