2024-CSP赛前集训总结
Todo List
9.11 😓
190pt。
T1
对
Solution
- 赛时
直接枚举
玄学算法建议算一下时间复杂度再交,可以多拍几组数据。
- 题解
A. 预处理出每个数的最小质因数,
B. 埃氏筛考虑每个质数的贡献,显然
T2
求树上最多不相交路径,
- 赛时
口胡了一下转 dfn + 序列贪心,做不了一点。
然后开始转 DP,易发现
显然需要数据结构维护树上单点修改+链求和。
A:数链剖分
B:DFS 序+数据结构维护
LCA 调了我将近 1h。
都不会不如写暴力。玄学评测机跑了 90pt。
没有正解直接交暴力,不要浪费时间
- 赛后
显然,赛时脑抽了。可以发现此类问题可以转换成子树修改 + 单点查询,转 dfn 变成区间修改单点查询直接秒了。
要善于转化问题,比如单点修改区间查询问题可以转换成区间修改单点查询。树上问题最方便的就是子树修改 + 子树查询。
3.题解
首先有一个性质:如果一条链选了,那么以这条链的 LCA 为根的子树里的点都不能选了,因此可以从下往上考虑。
显然这非常可以贪心。直接从下往上考虑,能选就选。
因为每个点最多只会被标记一次,因此为
多推性质,不要忙于解决问题。
T3
给定一个
- 赛时
无。
- 题解
矩阵快速幂。
如果直接 DP,那么矩阵的大小为
考虑容斥,用总的方案数减去某种材料没经过的方案数。
正难则反。
T4
给定
1.赛时
以为是贪心 or 构造,方向错了,推到比赛结束后都没有推出来。
2.题解
可以把人分为两类(A:包含别人;B:不包含别人)。
A 类的元素可以单独成为一组或者加入它包含的人的那一组。
问题转换为求出 B 组分走
此时可以把 B 中的元素按照
则此时最优分组一定是连续的。可以构造证明。
显然,可以使用单调队列优化。
9.16 😫
T1
给定
数据约束:
- 赛时
DP。把
接下来可以把
一直死磕
- 赛后
这道题正解就是
状态设计成
时间复杂度:
T1 不仅赛时调了我
9.22 😣
T1
1. Statement
给定正整数
2. 赛时
5min 推出正解,然后唐了,《
其实就是枚举子集和
3. 题解
欧拉函数求得
T2
1. Statement
有
2. 赛时
基本上所有时间都花费到这道题上面了。根据显然的贪心可以得出把所有限制按照左端点排序。能尽量往左排就尽量往左排。然后接下来就在想怎么用线段树维护。可以维护,但是非常难写。
3. 赛后
设
思考一下分配不了的必要条件:必定有一个区间
设
显然可以用线段树维护。
T3
T4
1. Statement
给定一个包含 '01?'
序列
2. 赛后
DP。设
最后对于每种
解释一下
- 你发现一个 0 是无法跨过长度为奇数的 1 的连续段的。
- 所以对于序列中的任意两个 0, 中间的 1 的奇数段的数量是一定的。
- 所以答案是
。
9.24 😞
T1
1. Statement
有
赛时没开 long long
,证明无论什么题都要对拍或造样例。
2. 赛时
开局 1h 推结论看错题了。以为是每个人单独的和。以后一定要先把题目看清楚再写题。显然初始时只能选
T2
1. Statement
对于所有长度为
2. 赛时
问题可以转换成对于每个
3. 题解
看来赛时真是唐了,稍微推一下就可以得到下面的式子。对于每个
T3
1. Statement
设
定义
2. 赛时
Joker 了。前两题花了太多时间,只够打个前缀和暴力。
3. 赛后
推了一下发现有一种做法是枚举求出第
然后把斐波那契联想成二进制发现这类题最好做的方法就是 数位 DP。设
显然,斐波那契数列的增长是
T4
1. Statement
给定
2. 赛时
依然是没有时间,T3 时间都不够了,更别说 T4 了。
3. 赛后
完全背包可以水过大部分分,加了 bitset
卡卡甚至能水过去。
显然题目中的随机性是非常重要的性质。可以设置一个模数
随机数据中一个小数为
9.25 😵
T1
1. Statement
给定一个长度为
2. 赛时
先推性质。显然如果前面操作之后,那么这个点再操作一定不是最优的。看到数据范围果断放弃贪心选择 DP。调了 30min 还是调了出来,整体节奏还是可以的。
T2
1. Statement
给定一个长度为
显然,所有操作之后
2. 赛时
观察到最终答案对应
3. 赛后
如果
T3
1. Statement
2. 赛时
DP。时间不太够了,没有仔细推。打了暴力还挂了。
3. 赛后
枚举 LIS 作为状态进行 DP,详见代码。
T4
1. Statement
题面过于复杂,见原题面。
2. 赛后
大模拟先攒着,之后补。
需要暴力出所有的五元组,然后把这些五元组排序,以及存一下每个三元组,可能构成哪些
9.27 😰
0 + 0 + 0 + 30 = 30pt
T1
1. Statement
给定一个长度为
2. 赛时
构造。想了一会发现可以分讨,先讨论
如果
如果
细节比较多,没有注意就会全挂掉。
3. 赛后
vector
,但依然比较复杂。这是一类比较经典的模型,每两个元素相消,可以使用 优先队列 来做。每次把出现次数最多的元素排出去, 正确性显然。
一定要对拍啊。不然很容易挂分的。
T2
1. Statement
给定一个
2. 赛时
显然可以把问题分成减边数和加最大值这两个子问题。前一个子问题非常轻易的就可以做到。
赛时尝试过枚举一条路径上深度最浅的点,不好算;也试过枚举路径的起点做换根,也不好算。推出来了每个点有一个 作用域 但是不知到怎么去维护它。。。最后只好打了个暴力,还是想复杂了,写了在线查询的,没想到可以直接
3. 赛后
我是什么品种的废物啊
多从几个方面去想,这道题涉及到了
T3
1. Statement
给定一个长度为 NOIP?
这五个字符的字符串。对于每个 ?
你可以填入前四个字符中的任意一个。接下来会给你一个
2. 赛时
现在看到这类状态数量很大的就认为是 DP 了,看到 DP 就有点 ptsd 了。以为又要花很多时间,跳过去了。其实就算给我那么多时间我也想不到可以用搜索来解决这道问题。
3. 赛后
刷新了我对搜索的认知。
其实搜素只要剪枝得当,时间复杂度就会从指数调到正解。就类似于暴力 DFS 与记忆化搜索的区别。在这道题中,因为
你说得对,但是这其实就是广义上的 A* 算法。
T4
1. Statement
给定一个长度为 border
的长度之和。
2. 赛时
如果直接暴力写 KMP,显然是过于暴力的。发现这道题本质上就是在求每个子串的出现次数,不会 SAM,SA 也没学懂,只能通过 Hash 莽了 30pt。
3. 赛后
对于 SAM 来说,这道题就是板子。对于 SA 来说,可以利用
9.29 😕
70 + 90 + 0 + 0 = 160pt
T1
1. Statement
有四盏灯,在一个四方格内。你可以调节每一盏灯的耗电量,每一盏耗电为
2. 赛时
一开始推式子,天真地以为可以
3. 赛后
赛时只要往三分的方向去想,就输了。以后做这类数学题,一般要主动往有单调性的方向去想。比如这道题,就完全没必要去对一盏灯的亮度去考虑。而是可以直接二分总耗电,然后去检验合法性。检验可以直接
此外,还有一种做法。当枚举对角线的两个点时,会发现它很具有连续性,因此每次剩下两盏灯的波动并不会太大,这种做法比上一种做法优异很多。
T2
1. Statement
给你一个
2. 赛时
一眼 DP。设
3. 赛后
其实这道题正解可以算是递推或者组合数学,赛时做法过于复杂了。
T3
1. Statement
你有
2. 赛时
真的写 DP 写到 ptsd 了,看什么都是 DP。。。觉得又是什么神秘 DP,选择开下一题。
3. 赛后
很难想象 C 会放比较容易的贪心。其实这道题贪心策略是非常容易想的。显然,交错次数过多,答案相对会更优。但是这个交错次数有一个界限,因此可以枚举这个界限。由于 A 转换到 B 是没有条件的,因此每一组应该被分成
T4
1. Statement
有一个函数
接下来有
2. 赛时
Subtest 2 + 暴力已经想出来了,时间不够了,匆匆忙忙结果写错了🤡。
3. 赛后
路上想出来了 Subtest 3 的二分做法和 Subtest1 堵塞做法,推出来了每一段答案可以表示成一段区间。
通过题解得知,每一个答案不仅可以表示成区间,还要表示成加上某个值。这个操作可以通过线段树维护。
9.30 😭
44 + 20 + 25 + 20 = 109
T1
1. Statement
2. 赛时
绷不住了,1min 出正解 30min 思考如何求答案,我是什么品种的弱智。。。先思考博弈策略,显然,序列中只要出现一个出现次数为奇数的数,则先手必胜。然后这个东西可以抽象成二进制异或,然后就可以简化成每个点到根节点。考虑容斥,出现不好求,求逆变成所有都为偶数。回到刚才的点到根节点,因为只要两个点异或起来为
但是这个二进制数有
3, 赛后
除了刚才说的 Hash 做法,还可以使用一种非常新的技巧:随机化。把每个边权赋一个随机值,只需要记录跟到每个节点的异或和就行了。
T2
1. Statement
给定长度为
2. 赛时
DP。看到
3. 赛后
先说另外一种人类智慧做法,因为
对于最大子段和这种做法来说,也是 DP。不过必须先推出几个性质:
-
钦定一个点,在这个点经过若干次跳跃之后,接下来来回跳以这个点为右端点的最大子段和。对于若干个转移来说,时间最小的最优(这并不难证明)。因此转移到这个点的价值就变成了附带属性。
-
如果以这个点为右端点,无论怎么跳,都不会跳到这个点右边。
接下来的转移随便转就行了。
T3
1. Statement
2. 赛时
贪心,赛时时间不够了,糊了一个连样例都没过的乱搞。竟然有 25pt。
3. 赛后
从底到跟去考虑。对于每个点来说,假设它所有的城市个数小于
对于根节点来说,没法往上传,但是由于此时任意一个省的大小都
T4
1. Statement
给定长度为
2. 赛时
一直以为是
3. 赛后
循环右移等同于把一段区间交换,只能使用 FHQ-Treap 来做。需要维护出一个子树内的最大值,最小值,两位的前面最大值,两位的后面最小值。
发现后面两个值并不好维护,因为子树内的值并不具有单调性。可以通过先把 ok 的情况判掉来构造单调性。
10.2 😔
36 + 5 + 80 + 0 = 121pt
这场比赛时间分配真的不好。。。
T1
1. Statement
给以一个
2. 赛时
本来准备贪心切掉的,每个点移动到子树内最远的点。发现并不好维护,接下来推出两个性质:
- 当出现类似于
A1...B2...B1...A1
时必定不是最优的。 A1...A2...B2...B1
和A1...A2...B1...B2
的代价是一样的。
接下来就有一个更优的贪心策略了:对于子树内的点,如果还剩下多余的起点,就往上移;对于每对起点和终点,随便找一个消掉就行了。
但没必要这么做,可以换一种角度来想,把起点挪动终点相当于把起点和终点都分别挪到它们的 LCA。这时只需要对于同一个节点内的起点终点两两相消。
但是,我赛时因为神秘错误大样例挂了调了 3h 死活调不出来😡,我甚至开始怀疑我贪心的正确性,心态爆炸,后面的题直接寄了。赛后才发现我高精 fill
没清完。这是人能调出来的错误吗。。。
T2
1. Statement
有
2. 赛时
推了式子,以为是 DP,没有往贪心的方向想。
3. 赛后
其实只要往贪心这方面想,这道题就直接秒了。显然,设一个数浪费的值为
T3
1. Statement
2. 赛时
没有时间推了,时间给够一定可以推出来。
3. 赛后
显然,这道问题可以转换成
T4
1. Statement
给你一个序列和若干个询问,每次询问给出一个区间,求出这个区间所有数字乘起来之后,莫比乌斯函数值,
约数个数,约数和。
2. 赛时
以为有什么神秘性质可以通过线段树维护。
3. 赛后
先攒着,等题过后更新。
10.3 🥴
45+100+0+100 = 245
信心赛考成这样。。。
T1
1. Statement
长度为
2. 赛时
显然,在不考虑相同的情况下,方案数为
3. 赛后
还有一种思考方式,先假设第一位固定为
T2
1. Statement
有
2. 赛时
阅读题面花了好久。
因为数据范围很小,先考虑暴搜,发现常熟过大,且 Meet in middle 不好实现,放弃暴搜。
考虑 DP,发现状态数量很大,怕炸空间,且不好优化,放弃 DP,选择开下一题。
回到这一题,发现真正的难点是
3. 赛后
不出意料,赛时挂了 55pt,既有 DP 的锅,也有三分的锅。很容易就会发现,这个函数会出现重复值,就不能用三分。因此只能枚举每个可能的
除此之外,这道题确实可以 DP。设
这道题还可以用暴搜做,Meet in middle 肯定可以做的,暴搜加点最优性剪枝也可以过。
T3
1. Statement
有
2. 赛时
一眼 set
维护直接秒了。维护两个 set
,分别代表点集和所有的区间。加入操作时,相当于找到在点集中找到前驱后继,删除大区间,加入两个小区间。删除操作时,相当于在点集中找到前驱后继,删掉两个小区间,加入大区间。
另外注意还要考虑两边的情况。细节有点多,90 多行代码调了 1h。
T4
1. Statement
给定一个
2. 赛时
时间不够了……
Lca 板题,建个最小生成树直接查就行了。很抽象的题目,不知道为什么要放 T4。
10.6
150。
T1
1. Statement
给定一条线段的两个端点和一个半径为
2. 赛时
光是理解题目就花了 20min。先考虑
3. 赛后
其实真的有很多种方法求。考虑
T2
1. Statement
有
2. 赛时
各种子问题全部写完用不了多久,有 70pt。看到随机数据决定觉得时间复杂度有点玄学。发现可以维护一个把若干个点合并成区间,但是怕过不了,一直在想没那么玄学的思路,反而浪费了思考下面几道题的机会。
3. 赛后
还有一个优化:当操作的数是
T3
1. Statement
给定可重集
2. 赛时
心态有点炸了,有点懵。发现是背包,且答案一定要快速求出与
3. 赛后
设
T4
1. Statement
给定长度为
2. 赛时
二分答案 + 检验。额,然后就卡在这里不知道怎么做了,由于种类数量太大,不可以状压。
3. 赛后
其实最近经常遇到这类的题,就是值的值域特别大不好维护,或者数据范围特别大,不好做。这就可以用随机化这种技巧。就像这道题,可以把每个
但是题目还没有结束。这时候发现时间复杂度会直接爆炸。第一种做法是对 unsigned int
存,转移优化成
心声
从开始集训到今天,每一场比赛都脱离了我的掌控。比赛结果也不尽人意。
我赛时思维真的很混乱,想题的时间反而比做题的时间长,而且写一道题正确率很低,要么要调很久,要么赛后要挂分。现在真的是到低谷了,思维跟不上,算法也不怎么会,心态爆炸,做题能力不行。就算我赛后听懂了题目的做法,但是我还是不能保证我在第二天的比赛时能调整状态做出来同样类型的题。
我想要提升自己的能力,但是我不知道从哪里开始补起。时间很紧张,三周不到的时间就要复赛了,还要赶文化课,呵。。。
迷茫
10.7
40 + 0 + 55 + 0 = 95
T1
1. Statement
有一些三元组
2. 赛时
看到题目心态爆炸,没有一点正解的思路。看了一会只发现数据一定满足给定三元组一定是
回过头来看题,发现二维的情况非常好处理,单调栈可以直接解决。打满了暴力之后才发现三元组可以联想到坐标轴上的
3. 赛后
其实可以枚举切面。假设枚举的是
T2
1. Statement
2. 赛时
时间不太够了,60pt 的状压期望 DP 没时间写了。
3. 赛后
期望 DP 有一个显然的优化技巧就是分类分组,合并具有相同性质的状态。这道题就类似,可以枚举最后的编号,然后算出它的概率。DP 的时候所有的物品就分成了三组:编号小于它的物品,它自己,编号大于它的物品。设
T3
1. Statement
给定长度为
2. 赛时
信息太多啦,脑子有点乱。首先观察到
3. 赛后
首先观察到一个性质:对于一个任意不成立的子段,这个子段的子段也一定不成立。这个性质的本质是:如果在一个子段内一个数的出现次数小于
显然这个分治的瓶颈的一个重要因素就是分成了太多的区间,发现只要找到任意一个不合法位置的把区间分成两部分就行了,发现并不能做到每次都把区间分成均匀的两部分,因此要换一种思路去优化。
考虑启发式合并,只要每次分治的时间复杂度都为
但是最短的一个段不一定在一侧,所以需要用双指针(Meet in middle)的思想来做。
还没有结束。在分治的过程中还需要维护
T4
1. Statement
给定长度为
现在有
2. 赛时
单点修改区间查询,是线段树没错了,但是不知道怎么维护。
3. 赛后
期望这类题目还有一种解法,就是转换成本质相同的问题。这道题可以转换成满足
服了,写了一天,重构了 3 次代码,还是调不出来。。。
复盘
心态太不稳定了,遇到一道题不会要调整心态,合理分配时间,把易拿分的都拿了。最后再花时间思考正解。
10.9
T1
1. Statement
有一个
交换,使得每一列都是单调不减的。
2. 赛时
遇到构造题太不自信了。
直接推就行了,显然对于每一种不合法情况来说,都存在一组
T2
1. Statement
有一个
除了最后一层的砖块外,每一个砖块都和下面一层的两个砖块相邻,呈现这样的形状:
塔上面只有红黄蓝三种颜色的砖块,并且有以下规律:
- 若相邻的两块砖块是相同颜色,那么这两块方砖紧挨的上面的砖块也将会是相同的颜色
- 若相邻的两块砖块是不同颜色,那么这两块方砖紧挨的上面的砖块将会是没有出现的第三种颜色
现在告诉你最下面一层的 A B C
表示),需要你推出塔顶部的颜色。爬到塔顶的牛牛已经看到了顶部砖块颜色,并且偷偷告诉了你,作为本题的提示——它说它看到的是灰色(因为牛牛是色盲)。既然你已经有了提示,我相信你一定能做出这道题。
2. 赛时
遇到好几道这种合并的题了。
首先推了一下性质,发现不好推,就打了暴力。中途想过转过数字去处理,但觉得没用,就没有考虑了。之后考虑了很久其他带
3. 赛后
这道题可以转成 012
来做。转成 012
之后性质就非常明显了:设底下的数分别为
这种题可以算作一种专门的题型了,很多都是杨辉三角,如果没有显然的性质就要转换成杨辉三角。
T3
1. Statement
白浅妹妹前一段时间学习了 LIS(最长上升子序列)算法。
她随便生成了一个数组,这个数组长度是
然后她开开心心的求出了这个数组的 LIS 数组,其中,第
然而她把原数组弄丢了,请你帮她算算,原数组有多少种不同的可能。
2. 赛时
肯定是 DP。
这道题一开始信息太多了,脑子有点乱。
整理了之后发现有一个充要性质是所有合法
这个问题已经非常简单了,但是不知道怎么 DP。
3. 赛后
这类题目可以转换成 DP + 组合数学。这道题
考虑优化:把填数的过程拆开,省去检验的过程和枚举子集的过程。设
T4
1. Statement
敌方军团有
我方有一些轰炸机,轰炸能力为
指挥官会告诉你敌方修建了哪个桥梁,以及询问一台给定
每次询问独立,即轰炸并不造成实际影响。
2. 赛时
暴力写挂了,打到后面真的是急了。。。正解先留着,自习的时候写。
复盘
题目练少了,一些常见的套路都不知道。在卡题的时候直接开下一题。先打满暴力再做其他题。
10.10
100 + 30 + 50 + 0 = 180
T1
1. Statement
长度为
2. 赛时
节奏有点乱了,想复杂了。
看到题没有思路,完全没有往正解的方向想。选择开下一题。回到这一题,还是没有思路。勉强推出了一个假的性质,不好实现也不好写。这时候的思路和正解很像,但是就是不对。大概就是三分最大的段数,然后 DP / 贪心。其实硬做也是能做出来的,但是我太菜了,调了好久都没调出来。
3. 赛后
感觉我的思维方式有点问题,简单的问题总是容易想复杂,总是想不到一些显而易见的性质。
这道题如果直接枚举旋转次数,就直接秒了。题目真正复杂的地方是如果直接维护整体的局面根本不好做,但是如果对于每一个位置都反别考虑,就非常可做。在确定了旋转次数之后(设它是
显然的,这个价值是一个单峰函数,因此可以三分。
T2
1. Statement
给定一个序列
2. 赛时
非常好做的一道题,20 min 直接切了,信心大增。
直接硬做,考虑从后往前分别维护一个上升和下降的单调栈,假设
3. 赛后
也可以容斥,最不好做的部分就是首尾分别为最大值和最小值的情况。分别维护一个上升和下降的单调栈二分就行了。
T3
1. Statement
定义一种构造字符串的方式为在已有字符串的没两个字符之间插入一个字符
2. 赛时
打了个 50pt 的暴力就继续去磕 A 了。
3. 赛后
其实正解也不难想,数据范围提示的已经很明显了。
显然,最终的字符串长度是
直接把
但是还需要明白题目的构造方法。设
T4
1. Statement
给定一个
2. 赛时
没有时间写,全在磕 T1。
3. 赛后
- 两条非树边,无意义。
- 一条树边,一条非树边,可以选一个桥,任意非树边;或者一条树边和唯一的可以替换它的非树边。
- 两条树边,两个桥;或者两个都不是桥,只要两条边的替换边边集一样就可以删。
下面考虑如何证明:满足该条件的两个点中间一定是一个独立的连通块,是的删掉这两条边之后中间的连通块和剩余部分断开了。
复盘
题做少了,感觉要多做一些思维题,改变一下思维方式,考试的时候不要想太复杂。整体来说其他题的节奏还可以,但是 T1 耽误了太多时间。
10.13
上去溜去补文化课了,没有考。
T1
1. Statement
给定
从图中选出
2. 赛后
3min 出解。首先问题可以转化成选
这道题还可以更快,反悔贪心就直接秒了,不过只是口胡了一下,不知道好不好实现。
T2
1. Statement
给定长度
2. 赛后
一道比较简单的构造,分类讨论就行了。显然,对于空位从小到大插没出现过的值一定是最优的。对于两个非零来说,如果
T3
1. Statement
斯坦纳树是这么一类问题:给定一张图
现在给定一棵树
请你输出希望你对每个
- 建一个新的完全图
,图中每个点都对应着询问点集 中的一个点,两个点之间的边权为其在 对应的点的树上距离。答案为此完全图的最小生成树大小。
2. 赛后
思维有点混乱。直接求最小生成树,一定会有一条边被
当有虚点分叉数小于3时:
1.分叉数
2.分叉数
当边权为
加点不好做,考虑删点。当不存在虚点时,做法正确。
T4
1. Statement
给定
2. 赛后
超级大 DP,留着练 DP 的时候写。
10.14
100 + 100 + 100 + 0 = 300
本来以为大家都会 AK 的。。。
哎,任重而道远啊。。。还有很多事情要做。
T1
1. Statement
给定长度为 *
,可以把它替换成任意一个字符串。对于
2. 赛时
考虑换一种视角去看,问题就变成了对于每个字符串
思考时间 5min,写题加调题大概在 50min 之内。节奏掌握比较好。
T2
1. Statement
给定一棵
2. 赛时
到现在还是想不明白为什么这道题会出现在提高组里面,大概是出题人想到了一个很好的并查集题目但是忽略了这道题
3. 赛后
看了下题解发现可以并查集做。其实还有一种方向就是拆贡献。从边的方向考虑,把边从小到大排序,就变成了一个经典问题。
T3
1. Statement
初始时有一根长度为
2. 赛时
看到存在就想到容斥。变成总方案数减去不合法方案数。现在一开始的总方案数就不好求,手推了一下发现就是
接下来就只剩硬核推式子了。我记得这个通项公式很简单,但我忘记了
当
3. 赛后
题解的方法非常值得借鉴。我赛时的推式子需要耗费大量的时间。题解是非常稳定的。只需要用数学归纳法掌握出每一项的递推式,然后硬核矩乘就行了。
T4
1. Statement
有
2. 赛时
思路有点混乱,期望 DP 好像不适合我。。。最终暴力都没有打出来。
3. 赛后
题解没看懂,选择有时间再专门练期望 DP。
10.15
100 + 90 + 10 + 0 = 200,原地爆炸。。。
T1
1. Statement
给定
2. 赛时
一眼题,用一个桶维护后缀期望人数就结束了。但是赛时有点不自信,又想了一会正确性,耽误了部分时间。
T2
1. Statement
初始时你在点
2. 赛时
看到题目的那一刻,噩梦开始了。显示花一部分时间理解了题意,感觉是个 CF 类型的题目,然后就开始各种联想推性质。一开始就发现了可以倒着推,但是对于 1500 的限制有点不自信,以为要通过每种神秘性质跑 Bfs,然后就开始了调同余最短路的折磨。中途发现了各种性质,比如它的操作次数一般都特别小,因此正数时可以直接乱搞。但是赛时不是很自信,不敢负数时直接乱搞。最后调了 2h 比赛都快结束了发现唐了直接乱搞缩小范围然后一直加 d 变成正数这道题就结束了。哎……
T3
1. Statement
2. 赛时
什么神秘题目啊啊啊。赛时就那么点时间,谁会想到有一道大码量数据结构题啊。这道题就硬拆贡献硬做就行了,我赛时拆出了
3. 赛后
以后再也不敢写错数据结构题了,绷不住了,这道题目花了我一天的自习时间才调出来。其实这道题目没什么思维含量,就是用树剖 + 线段树硬维护这
T4
1. Statement
为了认识更多的异性朋友,牛牛在各类活动中做志愿者(牛牛是女的?)。这天,牛牛在大型赛事
接待的过程是漫长而枯燥的,牛牛把这一过程中自己的心情变化用一个整数来描述,他称这个整数为他的开心度。大厅中有一个休息用的沙发,沙发到门口的距离为
- 当牛牛站在门口时(即牛牛与门口的距离为
时),牛牛的开心度每秒减少 ; - 当牛牛从门口向沙发走去的时候,牛牛的开心度每秒减少
; - 当牛牛从沙发向门口走去的时候,牛牛的开心度每秒减少
; - 当牛牛躺在沙发上摸鱼的时候(即牛牛与沙发的距离为
时),牛牛的开心度每秒增加 。
牛牛的移动速度固定是
为了能够快乐地摸鱼,牛牛事先收集了一些信息:
- 一共有
名选手需要接待; - 第
名选手会在时刻 到达大厅门口并等待接待,他的耐心值为 ,友善值为 ; - 如果牛牛在时刻
接待第 名选手,那么牛牛的开心度会瞬间上升 ,但是如果第 名选手在时间段 都没有被牛牛接待,这名选手就会向主办方投诉,从而导致牛牛丢掉这份宝贵的志愿者工作。 - 接待完所有选手的那一刻,牛牛的工作就完成了。
在时刻
2. 赛时
心态有点炸了,没有写。
3. 赛后
听说要用 Slope Trick,等到有时间了再写。
复盘
太不自信了,思考各种做法浪费了太久时间。面对很多性质,信息的题目时思维非常混乱,没有一点顺序。算法根本没有掌握,题目做太少啦,比赛阅历太少啦。这场比赛心态调节比较好,调了 2h T2 还没有放弃。除此之外,还应该掌握更多骗分的技巧。
10.16
T1
1. Statement
一个单词有
2. 赛时
显然,一个短语一定是由名词结尾的,且中间不能出现
T2
1. Statement
实现一种数据结构:
- 往第
个容器顶端插入 个 。 - 在第
个容器中从顶到底弹出 个元素,输出最后弹出的元素。 - 把第
个容器中的所有元素从顶到底依次插入第 个元素的顶端。
2. 赛时
一眼链表,当然这也是一道优秀的 FHQ / Splay 练习题。考虑如何翻转,如果你说打 lazy tag,那你就完了。lazy tag 需要考虑非常多的情况,非常不好写,导致我赛时调了 2h 都没调出来。不过也有我题练少了的原因。
3. 赛后
实际上根本不需要真正翻转。看来我学的双向链表一直都是假的。。。其实双向链表并不知道前面和后面,只需要我们记录出上一个出现的元素就可以按顺序遍历,这道题直接加边遍历就没了,哎。。。
T3
1. Statement
对于一个可重集
2. 赛后
显然这个操作需要用线段树维护。目前来说这并不好合并。先考虑把平方推一下式子,最终推出来是
T4
1. Statement
定义偶数为数字前一半和后一半完全一致的数。初始时给定一个偶数,每次会添加最少的数字在偶数末尾使得它形成新的偶数,直到它的位数超过
2. 赛后
字符串分治好题,等到有时间了再写。
10.20
T1
1. Statement
2. 赛后
稍微推一下式子就行了,对对球分开考虑,最终答案就是
T2
1. Statement
一个长度为
2. 赛后
一眼题,直接 RMQ 就秒了,但是
T3
1. Statement
纽约可以简化成
2. 赛后
显然边越多连在一起做车越划算,直接记录余数和分母跑最短路就行了。考虑公交车如何处理,只需要利用类似于线段树优化简图的方法,把所有站点都连在一个点,上车不需要钱,下车需要钱就行了。
T4
1. Statement
求一个序列的极长子序列的个数。
2. 赛后
显然需要 DP。对于一个极长子序列来说,第一个元素一定是最小的,最后一个元素一定是最大的。假设要从
区间取
10.21
T1
1. Statement
给定两个 01 串
2. 赛时
一眼题,直接前缀异或就秒了。
T2
1. Statement
在左下角是
现在要在格点上找
2. 赛时
寄了,想了一会发现可以枚举起始点和终点组合数学硬算,细节有点多,选择先开下一题,然后噩梦就开始了。
3. 赛后
先回到这道题上面,发现相同的长度的方案数是一样的,只需要枚举长度再乘一个数就行了。决策失误,应该先开这一题。
T3
1. Statement
牛牛有一棵
我们称一个长度为
, 为 的祖先或 是 的祖先; 。
你需要帮助牛牛求出最长的序列长度。
2. 赛时
先莽了 2 次贪心发现都假了,开始认真想。显然的,最优的方案一定是从底到顶走。每一个节点可以有两种选择,分别是选择两个子树内的值和一个子树内的值和一个它放弃的值。思路很明确了,但是 Dsu on Tree + multiset 调了 1h 都没调出来,我太菜了。。。最后写了个堆暴力合并,时间复杂度是错的,赛时时间不够了,以为今天是简单场,用可并堆可能是想复杂了,所以就没写。
3. 赛后
真是可并堆啊。赛后赶紧练了一下左偏树和 Dsu on Tree。其实这道题不用这些技巧也是能做出来的,就是线段树硬做,二分找到最大次大值合并,但是是
T4
1. Statement
定义一个数的 se 序列为其一个数位和为
定义一个数是 ll 数,当且仅当它的每一个数位都在至少一个 se 序列中。
现在牛牛想随机生成一个
现在牛牛想知道这个数为 ll 数的概率。
2. 赛时
最后 30min 期望 DP 部分分都打炸了,心态爆炸。
3. 赛后
好像是 bm,神奇多项式题目,留给卡老师贺吧。
10.23
信心赛就没什么参考意义了。
今天开题异常顺利,T2 见过类似的 Trick,直接秒了,T3 死磕了 3.5 h 才磕出来,T4 时间不够正解匆匆忙忙写挂了,优化也没加。漏洞还是太多了,要趁着接下来的几天赶紧恶补思维题和代码源比赛。
大家都发挥得很好,这次纯属运气好。还是没有达到预想的分数,还是做的不完美。。。
T1
1. Statement
定义
2. 赛时
看到题目就知道是信心场了。很显然啊,一个数如果有多个质因数,则
T2
1. Statement
给定
2. 赛时
阳寿要没了。。。这不就是一模一样的 Trick 吗。见 代码源 day 5 T1,只不过原题甚至还需要跑遍 Bfs。然后直接秒了。
现在回忆一下这种做法的本质,其实就是类似于线段树优化建图这样的原理。对于一个状态图来说,如果只需要关心部分的转移,则只需要把图简化成类似于树的结构,这也有点像 kruskal 重构树,不过差的有点远了。本质上就是减少了冗余的转移。
T3
1. Statement
给定一个字符串 *
表示通配符。
2. 赛时
思路真的很简单,不知道为什么要扯到自动机上面。就是每次肯定选后面第一个是最优的。然后出现多次就找循环节就行了。细节有点多,调了 2.5h。中间心态差点爆炸。
T4
1. Statement
有
2. 赛时
就 40min 对我来说真的不够。。。首先
3. 赛后
根本没有必要写最短路。因为每次只可能转移到前后两个点。直接贪心走就行了,走不了就回去,这样做正确性显然。
10.24
「致敬传奇飞行员佐巴扬」
T1
1. Statement
2. 赛时
看到神奇几何题想起了不好的回忆,果断选择开 T2。开完 T2 回到 T1,发现可以容斥,但是当时唐了,没有发现直接前缀后缀求交就结束了。然后发现了另一个性质,对于每个轴来说满足条件的段只有三段,直接离散化然后模拟就结束了。
但是赛时没删调试,导致常数乘二,本开常数就很大了,再加上只有 500ms,被卡常卡到了 60pt。。。
T2
1. Statement
长度为
2. 赛时
第一眼以为是数据结构,想了一会考虑从反面考虑发现了一个性质:如果
T3
1. Statement
长度为
2. 赛时
第一眼 FHQ,但是看到 500ms 选择放弃。注意到区间长度固定并且左边界单调上升,想到了滑动窗口,但是感觉和区间翻转差得有点远就没继续想了。最后推了很久性质还是什么都没推出来。
3. 赛后
滑动窗口是可以做的,只要再深入想一下这道题就没了。只需要用 deque
维护就行了。
T4
1. Statement
给定一张包含
初始时有一个空集合
- 直接将
加入集合,代价为 。 - 选择一个在集合中且与
有边相连的点 ,将 加入集合,代价为 。
求可以获得的最大代价总和。
2. 赛时
一开始想到了生成树,大样例也过了,没有仔细思考正确性,然后赛后挂惨了。
3. 赛后
因为没有考虑树的方向对答案的影响,所以直接这么做正确性堪忧。由于每次操作都会累加父亲的权值,而每个节点都有父亲,为了正确地累加权值,我们可以先将所有点的权值减去,并将任意两点之间边的权值设置成两点权值的总和。这样每个点在接入树的时候,它本身被减去的权值会被抵消,而父亲的权值会额外累加一次。
__EOF__

本文链接:https://www.cnblogs.com/guanyf-blog/p/18450251.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】