2025暑假模拟赛

2025.07.30

实际 <<<<<< 预估 <<<<<<< 口胡。

开题顺序:ABCD

时间分配:A:10min,B:10min,C:2h,D:1h40min

A

难度:绿 / *1700

看了一眼感觉直接枚举等级然后对每一行做求后缀最大子段和就行了。写完发现挂了,原来是没有钦定正好等于,稍微改一下就过了。

预估得分: 100

实际得分:100

B

难度:绿 / *1900

做法都写在标题上了。。。稍微推了一下感觉求所有是 \(i\) 超集的答案然后后缀取 \(\max\) 不会漏。于是直接做高维后缀 \(\max/\min\) 就好了。赛时以为只有 \(\max\)\(\max\)\(\min\)\(\min\),实际上有四种情况都要考虑,比如下面这个数据:

a: -1 -2
b: 1 100

四种情况取 \(\max\) 即可

预估得分:100

实际得分:20

挂分原因:推的时候漏了两种情况。

C

难度:蓝 / *2200

感觉是一道很 cf 风格的题目。

做的时候第一眼就感觉是直接按照只出现了一次分段,然后一个一个进行操作。但写了一下发现样例就不对,于是开始坐牢。过了很久才开始手玩样例。然后发现原来是取长度的一半重叠操作,直接做就行了。

写完发现大样例又挂了,看了一下是第一段和最后一段有无需操作的情况。想了想应该第一段取最长就好了(实际上是错的),写完之后过了大样例就跑了。

赛后发现其实可以 hack 掉,所以说要枚举第一段的长度双指针求出最后一段,中间的段数倍增就可以做到 \(\operatorname{O}(n\log n)\) 了。

预估分数:100

实际分数:67

挂分原因:贪心假了

D

难度:紫 / *3000

一开始以为是整体二分想了很久,但并不能做。后面想到可以 dp,推了一下式子发现每个数能否被选只与其后缀选的数的和有关,直接 \(\operatorname{O}(n^2)\) dp 拿到了 38 pts。

\(f_{i,j}\) 表示 \(i\)\(n\) 选了 \(j\) 个数,把具体转移写下来发现是个这样的式子:

\[f_{i,j}=f_{i+1,j-1}+a_i \]

\[f_{i,j}=f_{i+1,j}(f_{i+1,j}\le a_{i+1}) \]

也就是对于一段后缀将其平移一位并加上一个数,对于一个前缀可以平移也可以直接下落。

赛时想到这里感觉前缀不好做,稍微想了想猜测了一下 \(f_{i+1,j}\le a_{i+1}\) 可以势能分析(事实上确实可以)。后面那一段直接 FHQ 优化掉就好了。于是前缀直接中序遍历把 \(f\) 搞出来暴力。赛时想到这里只剩下半个多小时了并没有写完。

预估分数:38

实际分数:38

总结

在 C 上花的时间太多了,还是要加训 cf。以及不管题目给了多少大样例一定要写对拍。

2025.08.02

只会口胡选手没救了。。。

开题顺序:ABCD

时间分配:A:3.5h,B:30min,C:30min,D:0min

A

难度:蓝/*2100

看到题首先想到直接 AC 自动机。接下来一直在想 dpbfs 直接做,但一直过不了样例。大概过了 30min 想到其实可以缩点然后用 set 维护两个串的末尾点编号跑 dp,写了很久调了很久。

预估分数:100

实际分数:100

B

难度:绿/*1900

写完 A 后只剩 1h,看这道题做好了死磕的准备,但没想到挺顺利的。。。。(虽然最后成为唯一一个这道题挂分的

稍微手玩了一下发现直接对于每个问题都二分,确定有几个是 \(k\) 后就把剩下的当作垃圾桶直接判一个上下界就好了。写完没怎么调过了。

预估分数:100

实际分数:35

挂分原因:二分时边界处理出问题了。

C

难度:紫/*2500

看到这题时间不多了,虽说想出来了但并没有写完。(赛后对着 40 行代码调了 2h。

看了一下感觉 \(\operatorname{O}(n^3)\) 直接 dp 就好了。接着想正解但感觉 dp 不太能优化。试了试把 dp 换成网络流,那样就能很好把流量正好为 \(k\) 这个限制用 wqs 拆掉了,那剩下不就是一个模拟费用流板子???但这时候只剩 10min 了,快速打了一个暴力跑了。

不过写的时候 wqs 二分的边界/斜率边界/相同斜率情况确实要好好考虑。

预估得分:30

实际得分:30

D

难度:紫/*2700

赛时根本没看这道题。

赛后看了一下感觉 50 pts 应该比较好做,直接选 4 个位置与起来然后将这些东西或起来,\(\binom{7}{4}\) 轻松通过。

想了想感觉如果能把 \(a\) 排序后就是一个唐题。稍微想了想好像可以冒泡,但也只能通过 \(n=7\)。试了一下归并但感觉不好做(但正解就是这样)。

假设 \(\left[l,mid\right]\)\(\left[mid+1,r\right]\) 已经被排好序,归并得到 \(\left[l,r\right]\) 中第 \(x\) 的位置直接考虑是否有至少 \(x\) 个 1 即可。层数是 \(2\log n\) 的轻松通过。

总结

数据结构/大码量题一定要想好再写。

2025.08.02

开题顺序:A,D,B,C

时间分配:A:10min,B:1h,C:1h50min,D:1h

A

难度:黄/*1400

一开始看错题了,重新读了一遍后发现直接组合数算一下就好了。

预估得分:100

实际得分:100

B

难度:蓝/*2100

是一个前几天见过的套路,可惜大脑迟钝最后几分钟才发现,没时间了。。。看来一些 trick 还是要记一下。

赛时想了很久按质数考虑,但没啥进展。最后发现大于 \(n^m\) 和小于 \(n^m\) 的方案是可以一一对应的,只要 dp 求一下等于的方案数就可以了。但这时没时间了,写了个暴力走了。

预估分数:40

实际分数:40

C

难度:蓝/*2200

一开始以为答案肯定是右下角的矩阵,但玩了一下样例发现并不是。稍微想了想感觉是一个阶梯。于是直接设 \(f_{i,j}\) 表示前 \(i\) 个位置阶梯在 \(\le j\)。然后发现转移是一个后缀加法和一个前缀取 \(\max\),因为 \(f_i\) 单调直接线段树二分就做完了。

预估分数:100

实际分数:100

D

难度:蓝/*2100

看到这种最/次短路可存性直接想到了计数再哈希,想了想只要加上一个次短路计数就可以了,代码也不能,写了一下过了。

预估分数:100

实际分数:100

总结

多总结 trick。

2025.08.06

4 个数数还是太抽象了。。。

开题顺序:A,B,C,D

时间分配:A:20min,B:1h10min,C:1h10min,D:1h20min

A

难度:绿/*1700

看了一下直接拓扑排序就可以了,随便写了一下就过了。

预估得分:100

实际得分:100

B

难度:蓝/*2100

先推了一下式子,发现是对于 \(1\)\(x\) 中的每个数分解质因数,然后 \(\sum_{i=0}^{cnt_p}p^i\) 的乘积。直接做是 \(\operatorname{O}(n^2)\) 的,倒着做就可以做到 \(\operatorname{O}(n\log n)\),但这样要求逆元。想了很久没有什么办法,写了 80 分跑了。

赛后肖大佬说直接暴力修改那个等比数列的和就好了。复杂度是可以证明的。

预估分数:80

实际分数:80

C

难度:紫/*2400

第一眼就看到了模数为 \(2\),想了想发现非回文串可以相互消掉,于是只要求回文串(这几天怎么天天遇到这种trick)。分讨奇偶性,偶数直接递归,奇数枚举中间填啥。

一开始以为做完了,后来发现这样是 \(\operatorname{O}(n^2V)\) 的,只有 80。把 dp 过程抽象出来之后发现其实相当于对于若干个二进制位上可以贡献 \(a_i\),于是直接 \(f_{i,j}\) 表示前 \(i\) 位进位为 \(j\) 就做完了。

预估分数:100

实际分数:10

挂分原因:写了一个 1 << 65 lemonline 上过了,没看出来。

D

难度:黑/*3100

感觉是个困难题。想了很久二项式反演掉一维限制但并没有什么结果,猜了一下一定要到一个点距离小于等于 \(\frac{x}{2}\) 但感觉是错的(实际是对的)。写了个暴力走了。

考虑证明前面的结论。充分性显然,必要性考虑直接取那些点构成的连通块的直径中点即可。

有了这个结论之后就可以做了。注意到这些点必然构成一个连通块,于是可以用点减边容斥。

\(v_i\) 表示距离 \(i\) 小于等于 \(\frac{x}{2}\) 的点数,\(e_i\) 表示距离边 \(i\) 小于等于 \(\frac{x}{2}\) 的点数,答案为:

\[ans_i=\sum_{j=1}^{n}\binom{v_j}{i}-\sum_{j=1}^{n-1}\binom{e_j}{i} \]

NTT 即可快速计算。

\(v\)\(e\) 可以点分治计算。

预估分数:37

实际分数:29

挂分原因:数组开小了。

总结

考试结束前本地要测一遍所有样例。

2025.08.07

挂分最多的一集。

开题顺序:B,A,D,C

时间分配:B:20min,A:10min,D:3h,C:30min

A

难度:绿/*2000

一开始看发现是一个乱搞向的题就跳了。后面回来做了一下发现 LIS 的期望大约是 500,于是直接暴力分段就行了。但是写的是二分找答案相同段多一个 \(\log\),正解是需要倒着做然后每次 LIS 改变就重新跑一遍。

预估分数:100

实际分数:50

挂分原因:实现太烂。

B

难度:蓝/*2200

看了一下感觉 check 序列合法非常简单。求子段个数想了一下可以枚举右端点扫描线,那么要支持的操作就是把比一个数大的数删掉,整体乘 \(-1\),整体加上某个数。用 set 维护再打个 tag 就好了。

预估分数:100

实际分数:30

挂分原因:不知道 muiltisetcount 复杂度是 \(\operatorname{O}(k+\log n)\) 的,直接被卡成 \(\operatorname{O}(n^2\log n)\) 了.....

C

难度:黑/*3200

一开始感觉是个简单数数,但是想了想发现好像很难做。稍微想了一下好像没啥思路,会了个 30 pts 的 dp 就开 t4 了。写完 t4 回来就没时间了.....

正解太困难了,并不会.....

预估分数:5

实际分数:5

D

难度:紫/*2400

本场唯一通过的题。。。。

看了一下感觉 \(\operatorname{O}(n^2)\)dp 是好做的。优化直接用线段树合并再类似 [NOI2020] 命运 那道题一样再合并时维护前缀信息就可以了。写了很久调了很久发现连 \(5\times 10^4\) 都难跑过去,想了想感觉复杂度可能是 \(\operatorname{O}(n\log^3n)\) 或者是 \(\operatorname{O}(n\log^2n)\) 的带巨大常数,最后放弃了。

后来重新想了想感觉会了一个最小割建模,当作费用为 \(1\) 跑模拟费用流就做完了。很快就写完并调完了。

预估分数:100

实际分数:100

总结

找个时间上 oi-wiki 重新读一遍 STL。

posted @ 2025-08-01 10:57  caoshurui  阅读(52)  评论(0)    收藏  举报