CSP-S2025模拟7-13
CSP-S2025模拟7-13
2025.7.26 CSP-S模拟7
别人都在打模拟赛,只有我回家享受去了
(其实是回家看牙
2025.8.1 CSP-S模拟8
高二A层学长去外地集训去了,没打模拟赛
于是我的 \(100+100+60+20=280pts\) 就成了 \(rank1\)
T1
赛时一眼斜率优化dp,然后发现dp式子里有两个不同的 \(i,j\) 乘积项,没法斜率优化
先打了个 \(50pts\) 的 \(O(n^2)\) 暴力,开T2
打完T2暴力之后写了个疑似正解,随机数据 \(O(n \log n)\) ,但也许能被卡到 \(O(n^2)\) 的离奇做法:
先固定两个端点,再选取贡献最大的位置更新答案,对两侧分别继续递归求解
赛后发现正解是 \(O(n)\) 的单调队列维护凸包
T2
赛时一眼背包dp,但是数据范围太大显然不能背包
先打了个 \(60pts\) 的 \(O(nk)\) 暴力,开始写T1正解,然后又去开T3
打完T3暴力之后写了正解:
二分答案,判断合法性时遍历每个分割点,判断是否满足总个数大于 \(k\)
T3
赛时一眼高斯消元
直接打 \(60pts\) 的 \(O(m^6)\) 暴力,之后然后写T2正解
但是这次没想出来正解,赛后看了题解才调出来
只能说太逆天了
T4
赛时 \(20pts\) 暴力
感觉正解不如神秘欧拉序+bitset做法
2025.8.3 CSP-S模拟9
放假当天的模拟赛,没心思打了,\(100+50+10+0=160pts\),\(rank2\)
T1
注意到
则
等号左端为负时无解,为\(0\)时必定有解,否则枚举其因数进行判断即可
T2
赛时写了个 \(50pts\) 假贪心
赛后没调,但是申必数据放过去了输出 \(\max(a_i+b_i)\) 的抽象做法,造成机房用此题展开别样的卡常大战(此事在机房史-卡常中亦有记载)
T3
赛时写了个 \(10pts\) 暴搜
正解好像是枚举首个移动的节点,对其他节点的移动顺序先后关系进行拓扑排序
T4
咕咕咕
2025.8.13 CSP-S模拟10
假期结束后的第一场模拟赛
生病了,没打
2025.8.14 CSP-S模拟11
没发挥好,\(90+100+70+0=260pts\),\(rank6\)
T1
建出树后暴力染色,跳父亲,判断是否冲突
赛时数组开小了,挂 \(10pts\)
T2
注意到 \(r-l\le10^6\)
先 \(O(\sqrt V)\) 筛质数,再遍历每一个质数,处理质数的倍数
T3
赛时已写出正解,但是没敢交,怒挂 \(30pts\)
正解 \(O(n)\) 树形dp,但我写的 \(O(n \log n)\) 点分治也能AC
简单点分治,求路径信息时加上增量即可
T4
神秘线段树板子题,看哭 \(998244353\) 名oier
每个任务都相当于时间-传送带位置坐标平面上一条斜率为\(1\)的线段
“压平”后可得到多条水平线段
定义线段之间的偏序关系:当两条线段 \([a,b],[c,d]\) 满足 \(b<c\) 时有 \([a,b]<[c,d]\)
则问题转化为由这些线段组成的偏序集上的最小链覆盖问题
根据Dilworth定理可得最小链覆盖数等于最大反链长度
最大反链长度为所有位置被线段覆盖次数的最大值,用线段树维护即可
注意:
- 起初部分位置没有盒子,故要加上 \([2,n],[3,n]\cdots[n,n]\) 这些线段
- 并不是所有位置都有任务,故查询时只需查询 \(1\) 到所有任务右端点最大值即可
2025.8.16 CSP-S模拟12
计数题 Round 1
\(80+100+60+0=240pts\),\(rank 1\)
T1
观察可得,位置 \(i\) 对答案的贡献为 \(a_i\) 减去 \(a_1\) 到 \(a_i\) 中包含 \(a_i\) 的值域连续段左端点再加一,总答案为所有位置贡献之积
正解为 \(O(n)\) 并查集,小常数 \(O(n\log n)\) 线段树也可过
但是我的大常数 \(O(n\log n)\) 线段树TLE了,挂 \(20pts\)
T2
计数dp
设 \(dp_{i,j,k}\) 表示左侧枚举到 \(a_i\),右侧枚举到 \(a_j\),且 \((\sum_{p=1}^{i}a_p)-(\sum_{p=j}^{n}a_p)=k\) 的可行方案数
不难列出状态转移方程
暴力转移复杂度为 \(O(n^2V^2)\),注意到一个状态可由多个 \(k\) 连续的状态转移得到,故可用前缀和、差分优化至 \(O(n^2V)\)
T3
赛时想到正解了,但是时间不够只打了枚举所有排列的 \(60pts\) 暴力
一个有用的结论:\(1\)~\(x\) 的所有全排列逆序对个数和为 \(\frac{x!x(x-1)}{4}\)
证明:每个数对要么构成,要么不构成逆序对,且两种情况可一一对应,则每个数对贡献 \(\frac{x!}{2}\),乘以数对的数量 \(\frac{x(x-1)}{2}\) 即可
首先处理循环节(长度为 \(n!\),每个循环节贡献为 \(\frac{n!n(n-1)}{4}\))
设位置\(p\)为最右段单调递减子串左端点,即 \(a_{p-1} < a_p\) 且 \(\forall p \le i < n , a_i > a_{i+1}\),位置 \(q\) 为单调递减子串中满足 \(a_q>a_p\) 的最靠右的位置
不难看出,枚举下一个排列时需交换 \(a_p,a_q\) 并将 \(a_{p+1}\) 至 \(a_n\) 翻转
至于优化。。。把 \(a_{p+1}\)~\(a_n\) 组成的所有排列汇总计算即可
咕咕咕
T4
咕咕咕
2025.8.17 CSP-S模拟13
信心赛,但是 \(100+80+100+100=380pts\),\(rank3\)
qed和zxk太超模了,强烈建议削弱
T1
这不带权并查集吗,水题!
布豪,我带权并查集写假了!
既然这样。。。那我就只能——
将所有操作被合并的节点连边,建树,dfs求根链和,最后差分求树链和
貌似没必要树剖
T2
居然是树形dp,微距了
赛时两个小时想不出正解,怒而打满 \(80pts\) 部分分
设 \(f_u\) 表示从 \(u\) 出发在其子树中移动最终回到 \(u\) 的最大价值减代价
则 \(f_u=\sum_{v\in son_u}\max(f_v+w_{u,v}-k,0)\)
但是最终不一定在 \(1\) 号节点处停止,故需要枚举每个节点 \(t\),求 \(f_t+\sum_{u,v}(f_u - \max(f_v+w_{u,v}-k,0)+w_{u,v})\) 的最大值
式中 \(u,v\) 均在 \(1\) 到 \(t\) 的路径上,且 \(u\) 是 \(v\) 的父亲;式中右侧的求和是求 \(u\) 子树中除了含 \(t\) 的子树以外的最大价值减代价
T3
组合数学大水题
不难发现,打乱后符合题意的序列 \(a_1,a_2,\cdots,a_n\) 满足 \(a_2+a_n=0,a_3+a_{n-1}=0\cdots\),用桶存储数值,枚举相反数即可
细节较多,需注意
T4
赛时 \(10\) 分钟切掉
相等关系用并查集维护,答案为每个连通块内总数减去众数出现次数
连通块内数值出现次数用 map 维护,合并时进行启发式合并
\(O(n\log^2n)\),但是没被卡常,成功AC

浙公网安备 33010602011771号