2023 CSP-S 赛前模拟赛爆炸记
前言
正如标题,可能会有点很爆炸,\(cy\) 说每周考 \(4\) 次,不够往上加,我觉得很行。
本文所有非 Special Judge,非交互题均采用由 xiezheyuan 自主研发的 Hello Judger 评测工具在 Windows 环境下以标准时间开启 C++14 运行(不开启 O2)。
\(09.04\)
mod
- 赛场用时:\(50 \min\)。
- 期望得分:\(50pts\)。
- 实际得分:?
- 改题得分:?
貌似判 \(p\) 等于质数就可以拿 \(50\) 分,但是费马小 \(a^{p - 1}\) 应该是可以直接算的,所以不难发现答案为 \((p - b^{p - 2}) \bmod p\),但是好像没有 \(50\)?
broadcast
- 赛场用时:\(80 \min\)。
- 期望得分:\(60pts\)。
- 实际得分:?
- 改题得分:\(100pts\)。
想想怎么做,首先按照坐标排序。
很明显我们可以将选择一个点下载,然后所影响的所有点算出来,这肯定是一段区间,考虑选的区间有什么限制,肯定不能有两个区间是有包含关系的,然后最少和最大就直接 DP,最大还要特殊处理一下,至于影响的区间,用线段树就行了?这似乎是我的考场正解做法,没打出来,但很真。
TJ 做法是暴力建边,最少就是看缩点后有多少棵有向树,最多就是看有多少个点。但是空间和时间都会爆炸,发现我们对于一些不必要的点可以间接连边,这就引入到一个优化 trick,线段树优化建边,考虑一个点向左儿子和右儿子连边,然后叶子向序列的点连边,然后如果一个线段树上的点的区间被序列上一个点的区间包含,就连向这个点,不难发现这样产生的效果与上面暴力建图的方法一样。
tree
- 赛场用时:\(30 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:?
- 改题得分:?
不知道咋做。
lock
- 赛场用时:\(40 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:?
- 改题得分:\(100pts\)。
这题目很逆天啊,考场上打表打了出来。
答案就是所有和小于 \(m\),但是加入任意一个数就大于 \(m\) 的集合个数。
\(09.05\)
intervals
- 赛场用时:\(60 \min\)。
- 期望得分:\(100pts\)。
- 实际得分:\(80pts\)。
- 改题得分:\(100pts\)。
考虑一个事情,如果 \(a < 0, b < 0\),不选任何区间,\(a < 0, b > 0\),那么选择所有区间,\(a > 0, b < 0\),那么不选择区间,如果 \(a > 0, b > 0\),那么最多只会有两个区间。
考虑证明其充分性,如果区间数量过多,那么交集会变小,由于包含零点,所以多个区间的并集大小一定有一种可以用两个区间覆盖得到的方案,然后发现我们拆一下贡献,发现这东西是可以维护的,用权值线段树维护即可,听说用基数排序可以做到 \(O(n)\)。
考场上没特判选择所有区间或者不选。
trans
- 赛场用时:\(40 \min\)。
- 期望得分:\(80pts\)。
- 实际得分:\(80pts\)。
- 改题得分:\(80pts\)。
考虑一个事情,局部最优一定具备扩展的全局最优的充分条件。
考虑证明,前面最多段一定可以保证后面也最多。然后就可以胡出一个 \(n^2\) DP。
然后发现这东西的限制可以拆,拆完后可以用标记永久化的权值线段树维护。
然后考场上是只想到了 \(n^2\) 的 DP,并没有想到拆贡献。
ez
- 赛场用时:\(5 \min\)。
- 期望得分:\(10pts\)。
- 实际得分:\(10pts\)。
- 改题得分:\(100pts\)。
至于暴力就是每次将 \(k\) 个数与堆里的数暴力相加,然后取前 \(k\) 小。
这题可以直接 \(O(k^3 \log k)\) 草过去,但是正解少个 \(k\)。
至于咋做就不太明白了。
traffic
- 赛场用时:\(40 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(100pts\)。
考虑转化这个问题,就是删掉若干条边,使得剩下的图没有环,不难想到一定是一棵最大生成树,但是如果这颗最大生成树上有负边权就直接跳出,然后用总边权减去即可。
考虑证明这个事情,因为负边权肯定要全部选,所以这样一定是最优的。
\(09.07\)
2389
- 赛场用时:\(10 \min\)。
- 期望得分:\(100pts\)。
- 实际得分:\(100pts\)。
- 改题得分:\(100pts\)。
sb 题目,考场上 \(10\) 分钟就切了,定义 \(t = \min(h - 1, m)\),发现答案一定是 \(\frac{(t + 1) \times m - \frac{(t + 1) \times t}{2}}{h \times m}\)。
2390
- 赛场用时:\(90 \min\)。
- 期望得分:\(40pts\)。
- 实际得分:\(20pts\)。
- 改题得分:\(100pts\)。
赛场上思路想错了,考虑正解是什么,我们按照这样的方法构造即可,我们把 \(P0, P1\) 定义为 \(> \frac{n}{3}\) 但 \(< \frac{n}{2}\) 的质数,\(p\) 为质数集,不难发现上述的数最多两个:
对于 \(n \le 12\) 我们直接暴力即可,然后上述柿子有些细节(分类讨论)需要注意。
2391
- 赛场用时:\(10 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(100pts\)。
考虑正解是什么,对于第二问的 \(x\) 的位置,我们一定可以拆成 \(ax + b\) 的形式,如果假如无限个人,那就把 \(a, b\) 乘二,否则就把 \(b\) 加上 \(k\),我们第二问解决了,考虑第三问,我们记下操作序列,对于加入无限个人,暴力即可,对于一段连续段的 \(+k\),如果这一个连续段可以直接减,那就直接跳,如果不行,就二分到哪里结束。
不难发现上述过程可以用线段树维护。
2392
- 赛场用时:\(20 \min\)。
- 期望得分:\(20pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(0pts\)。
赛场上根本没想到。
考虑建出一棵点分树,然后发现树高是 \(\log\) 的,考虑枚举 \(u\) 的每个祖先,把路径贡献拆成两段,然后用线段树维护子树内出现的最小的 \(v\),然后就可以直接求解了。
时间复杂度是 \(O(n \log_2 n)\)。
\(09.08\)
T1
- 赛场用时:\(10 \min\)。
- 期望得分:\(100pts\)。
- 实际得分:\(100pts\)。
- 改题得分:\(100pts\)。
sb 题目,对每一位分别考虑,分类讨论即可,发现不可能存在多解情况。
T2
- 赛场用时:\(60 \min\)。
- 期望得分:\(100pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(100pts\)。
说一下输出方案怎么搞。我们从右部没有匹配的点开始匹配,然后如果是右部点,就跳向左部未匹配点,否则就直接跳匹配点,左边没打标记的和右边打了标记的都是最大独立集上的点。
最大独立集板子,考虑在补图上求最大独立集,然后输出方案就是所有点减最小点覆盖上的点。
然后出了一个小 Bug,然后就挂分了。
T3
不会。
T4
不会。
\(09.11\)
ioday1
- 赛场用时:\(10 \min\)。
- 期望得分:\(100pts\)。
- 实际得分:\(100pts\)。
- 改题得分:\(100pts\)。
显然,每个位置放 \(c_i\) 对的概率为 \(\frac{c_i}{n} \times \frac{a_i}{n}\),由于每个位置都可以这么放,所以答案要乘上一个 \(n\)。
paper
- 赛场用时:\(70 \min\)。
- 期望得分:\(40pts\)。
- 实际得分:\(40pts\)。
- 改题得分:\(40pts\)。
矩阵乘法题。
首先 \(O(n)\) DP 应该很好想,考虑对于每个 \(i \bmod j\) 相同的 \(i\) 总是有一部分是相同的,记一个 \(g_{i, j}\) 把这个值记录下来,然后直接转移就好了。
ioday2
- 赛场用时:\(90 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(100pts\)。
神仙题,首先我们要知道完全图上最小生成树的一个结论。
首先把 \(1\) 作为根,所有点按照 \(1\) 的距离排序,然后对于 \(i\) 而言,在它前面找一个距离它最小的点作为它的父亲就行了。
然后考虑期望怎么求,就是之前的点都不能选且当前点可选的概率,这个是很容易求出的。
fake
- 赛场用时:\(30 \min\)。
- 期望得分:\(20pts\)。
- 实际得分:\(20pts\)。
- 改题得分:\(20pts\)。
不会做qwq。
\(09.12\)
很崩溃啊qwq。
2457
- 赛场用时:\(90 \min\)。
- 期望得分:\(50pts\)。
- 实际得分:\(50pts\)。
- 改题得分:\(50pts\)。
这道题目是很逆天的,讲一下正解思路。
考虑到是有决策单调性的,我们可以把一个数之后的所有数加入线段树里,再跑一遍单调栈,最后撤销一下就好了。
2458
- 赛场用时:\(40 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(100pts\)。
考虑进行一次操作是将最前面的数放到后面,类似冒泡排序的方式不断向前挪,然后最后三个特判一下,如果不能组合就只能输出 \(-1\) 了,考虑最多操作 \(3\) 次,对时间复杂度没有影响。
2459
- 赛场用时:\(15 \min\)。
- 期望得分:\(0pts\)。
- 实际得分:\(0pts\)。
- 改题得分:\(0pts\)。
考虑状压 DP。
考虑到一个点要成为最优点绝对是前面的点的贡献都小于 \(0\),后面都大于 \(0\),用状压 DP 实现,这样子做有明显的正确性。
2460
- 赛场用时:\(30 \min\)。
- 期望得分:\(10pts\)。
- 实际得分:\(10pts\)。
- 改题得分:\(10pts\)。
数学题,不会。

浙公网安备 33010602011771号