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

注意到

\[\sum_{i=1}^{n}(a_i \mod k) \equiv \sum_{i=1}^{n}a_i (\mod k) \]

\[\sum_{i=1}^{n}a_i - \sum_{i=1}^{n}(a_i \mod k) \equiv 0 (\mod k) \]

等号左端为负时无解,\(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定理可得最小链覆盖数等于最大反链长度

最大反链长度为所有位置被线段覆盖次数的最大值,用线段树维护即可

注意:

  1. 起初部分位置没有盒子,故要加上 \([2,n],[3,n]\cdots[n,n]\) 这些线段
  2. 并不是所有位置都有任务,故查询时只需查询 \(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

posted @ 2025-08-17 15:28  bjt123  阅读(57)  评论(3)    收藏  举报