24 暑假 diary(MX 盖世计划 B 班集训后半段)
7.28
前些日子在上 hb 的课,打算 29 号开始打下 MX 的。
那今天就摆摆摆了,就随手写了几道题。
不配打 A 班,在 B 班垫底挺好的。
7.29
上午模拟赛,打得像个唐氏。
期望得分:
实际得分:
倒数前十,第一天就垫底,rp++ 了这下,但我真他妈不会啊,被嘲讽了/ll/ll。
然后就补题补了一下午+大半晚,谁叫你一题不会的来着。
A#
考虑把平方内的式子化成
枚举
首先先对
把
首先你要先在
最后就是你需要再把
复杂度是
我草我场上真不会啊??我草我场上真不会啊??我草我场上真不会啊??我草我场上真不会啊??
B#
考虑暴力做法直接设
显然地会发现这个 dp 可以写成矩阵乘法的形式,以为自己会了突然想起来输出的是异或和。
如果输出的是和可以直接倍增预处理转移矩阵的
考虑平衡复杂度,设置一个阈值
我们直接算一下看看,预处理
理论最优是取
C#
相比之下没那么神经的一道题,但是场上这题我是最不会的/cy。
记
同时也容易观察到,第
所以说能走到的点在若干条以
复杂度大概是
D#
你也是道魔怔题。
考虑分块,先暴力处理出来初始的答案,去从区间覆盖这种操作入手。
修改时,散块内直接暴力改,考虑整块。因为块内的
有个很神经的地方是,修改时对散块暴力求
块长直接取
我卡了一下午常/oh我卡了一下午常/oh我卡了一下午常/oh我卡了一下午常/oh。
7.30
训练赛,只会一道题,真给我糖丸了。
我觉得很合理,剩下的确实不像是我能做出来的。
训练赛的题解就写得简略点了,因为我懒。
A#
考虑初始局面
所以我们轻易地刻画出了移动次数的限制,直接 dp 即可,设
暴力转移是四方的,维护个后缀
B#
考虑设
lcp 可以考虑哈希+二分,而这题是在 DAG 上且每个点都需要维护。但是观察到每个点的哈希值其实是一种继承关系,也就是找字典序最小的后继继承过来再在开头加字符,所以说容易想到主席树维护哈希。比较时直接二分套主席树即可,因为这题特殊的插入方式感觉不太能在主席树上二分。
唉这不是那道 The Classic Problem 吗。
直接做是
C#
考虑单个
答案显然只有
直接二分出每个段就好了,复杂度
D#
不知道为什么放在这里的唐氏题。
F#
考虑一个结点被放了棋子对于局面的影响。假如只有一个棋子,那么按照最优方式移动先手的移动次数肯定多于后手,可以使用最优策略下的步数来判断输赢。设
那题目让我们计数数的是什么东西呢?容易发现所有的棋子之间其实是很独立的,有多个棋子时,只要这些棋子总共能让先手走的步数大于后手,就一定是合法的局面,所以就相当于是求有多少个子集的
7.31
模拟赛,这场打得还可以。
期望得分:
实际得分:
但是 B 和 D 一点不会做其实挺唐的。
A#
先考察下这个变换操作和序列有什么特殊性质,考察了一个小时结论是啥都没有。
场上很慌啊,感觉一点不会,直接写了个爆搜加了点剪枝,看所有样例都跑出来了就扔了,然后赛后一看过了。
事实上爆搜的复杂度就是挺对的,我们考察下搜索树的性质。
显然遇到
考虑加速搜索时枚举因数的过程,容易发现枚举的一定是开始时
加上这些就能直接过了,不好评价的题。
B#
场上一点不会,挺唐的,但我感觉这题确实挺牛的,这里参照一些 zxb 讲解时的思路,我觉得很 educational。
首先接到这个题我们发现这个排列是完全随机的,序列有什么我们根本不知道,我们不太喜欢。但是同时也是由于排列是任意填的,这也启发了我们题目可能有很强的对称性,也就是说有很多的方案或者位置其实是等价的,我们可以试图通过较少的信息来描述出这些等价的东西。
具体地,我们注意到函数在执行完毕后,我们其实只关心两个信息:
记
设返回的数为
对于
同理对于
统一再乘上一个
显然
时间复杂度
C#
感觉之前吴爸讲过一个类似的建图,所以场上过了(笑)。
首先考虑暴力,若
不难发现对于每个连通块,我们一定能将这个连通块内对应的位置直接排序,因为我们可以实现任意交换。
但是这么做边数是
注意到
- 对于每个下标
,将 连向 的补集,将 连向 。 - 对于每个
到 的数,向其去掉一个 的子集连边。
注意要建
容易发现这样每对满足
发现边数是
D#
其实是个简单题,没绷住。
首先直接计算无从下手啊,那肯定是先拆每个点对的贡献,不然根本算不了。
记
把
对于颜色的限制,我们考虑直接对颜色扫描线,那么只需要维护一个加点和删点的操作。加入或删除点时前两个式子都是很好增量维护的,关键在于第三个式子含有一个
处理方式是,考虑
那其实已经做完了,复杂度
8.1
睡得很舒服。训练?真的不熟。
算了还是点开看看题,怎么全是 DS。。。
A 是那道 T-shirt,B 简单题,CD 根号题,懒得写了,开摆。
8.2
好耶,又是模拟赛,打得还可以吧。
期望得分:
实际得分:
逆天反向挂分。
A#
肯定先拆线性性吧!对于血量为
所以先开桶前缀和预处理,这样我们很容易得到分出来一个蓝量为
暴力 dp 考虑设
考虑优化,容易发现每层转移之间相当于和
所以定义乘法为
B#
什么唐氏题,还能放 T2 的。
考虑每次询问我们该怎么走,每个点的出边我们按照指向的点的编号排序,那么我们每次移动肯定选第一条指向可以到达终点的边。
这个暴力移动直接告诉了我们,如果知道了终点在哪每个点要怎么走是唯一确定下来的。
所以我们可以枚举终点
新图可能会存在环,如果一个点到终点之间有环点那序列肯定是无穷大的长度,否则我们直接找出这个图上的路径上的第
因为每个点出度至多为
每个终点都预处理一遍即可,
C#
手玩一下容易发现策略:每次最靠左的清零之前来回横跳,直接模拟是
考虑如何维护这个过程,设
对于区间
所以做到了
D#
什么魔怔题,flow 太魔怔。
因为答案是分式的形式,考虑 01 分数规划,二分答案
集合的形式未免太丑了,我们设
这个可以按照最大权闭合子图的模型建模跑最小割判断,而且还有严格的复杂度上界
具体地,这个相当于是一张有
8.3
什么唐氏模拟赛。
期望得分:
实际得分:
A#
前三题最难的题吧。
考察操作的本质,选两个互质的数代价是显然的,假设选择的数
那就尝试每个质因子分开做,我们把质因子按次幂排序,尽可能把大的仍在一个数就好了。
复杂度肯定能过,上界是
B#
未免有点太典了吧。
撤销操作先放在一边,把修改操作搞明白之后撤销可以直接暴力做逆操作,
按照相对深度加等差数列,我们肯定是要转成绝对深度的,具体地把贡献写成
因此我们按照 dfs 序把修改操作扔到 set 里,每次撤销直接把子树内的取出来逆向操作即可。
对于
时间复杂度
C#
未免有点太唐了吧。
考虑扔掉
考虑加上
时间复杂度
D#
线段树分治,懒得写了。
8.4
休息。
8.5
答辩模拟赛,不想补了。
努力钻研了一下 wqs 二分,略有理解,抽空会专门总结。
8.6
抽象训练,三个博弈一个数数两个 DS。
懒得写了。
8.7
搬了云浅出的一场模拟赛,打得很一般,T3 的平方没拿到糖丸了。
期望得分:
实际得分:
云浅怎么在 T4 放 *3200 的 dp of dp。
A#
等价于分别在
如果要求一个序列内有几个区间
现在我们就直接枚举
时间复杂度
B#
答案显然具有单调性,先二分答案
先考虑树的情况,为了开始连通每条边起始时间肯定是
对于基环树,考虑把环边拉出来,容易归纳证明肯定要把环上权值最小的边在开始时刻断开,次小的边结束时接上。
此时相当于环上最小和次小权值的边合并,然后就等价于树上了,没有区别。
时间复杂度
C#
我草为啥我场上一点不会做/ll/ll。
先拆点对贡献。先拆点对贡献。先拆点对贡献。先拆点对贡献。先拆点对贡献。先拆点对贡献。先拆点对贡献。先拆点对贡献。
我们考虑枚举点对
我们称
我们假设这些点一共有
求和的东西全都和
所以对于每对需要经过
注意到关键点将原序列分成了若干段,我们枚举两个段,假设长度分别为
, 。
我们分析下,当
虽然枚举段仍然是
时间复杂度
D#
巨大困难题,dp of dp。
考虑一个数的
因为单个数计算的复杂度是不可能再低下去了,我们就只能计数有多少个数的 dp 状态是合法的,那就只能是 dp of dp。看上去直接把
首先一个观察是最后的答案一定不超过 int128
表示
现在的状态数是
所以我们可以直接把这一万多种状态拉出来做 dp of dp 了。预处理
跑得相当快,CF 上只跑了 234ms。
8.8
/shui/shui/shui/shui/shui/shui
8.9
巨大抽象模拟赛,我直接当场坠机了/cf/cf/cf。
打了高贵的
A#
脑瘫题,开桶把次数拉出来双指针扫即可。
对桶做桶排可以线性。
B#
抽象题,一点不会啊啊啊啊啊啊。
考虑一个中心点和它的上下左右:
.1.
3#4
.2.
我们可以把填 L
理解成:在
然后我们考虑在它们之间连边,通过给边定向的方式来描述选哪个(???????)。具体地,找到原来的图中的每个中心点,把它对应的
特别地,给每个中心点自己连一个自环,上下左右有超过边界的就把连向对应点改成连向自己。
有了这个就比较好做了,我们找到图的每个连通块,然后进行讨论:
- 如果连通块是一棵树,假设有
点,那么可以钦定任何点为根然后构造出一棵外向树,所以答案乘 。 - 如果连通块是一棵基环树,环是自环那就限制了方案唯一,否则环上的点可以是顺时针或逆时针定向,方案乘
。 - 对于剩下的情况,则代表边数大于点数,显然无法定向使得每个点入度不超过
,报告无解。
做完了,可以做到
为啥会想到通过给边定向来描述啊?这是啥我没见过的常见套路吗/ll/ll。
C#
说实话场上这题想到的要比 B 更多一点,感觉相对不那么抽象。
直接操作原串太复杂了,我们肯定要思考的是如何判断一个完整的串能不能删完,如果能做到快速判断这个可以直接写一个线性 dp 在
为了方便,下文中令
判断一个串
是 的倍数,因为每次删的串长是固定的 。 中恰好有 个 和 个 ,因为每次删掉的 数量也是固定的。
我场上的思考就到这里结束了,因为没敢猜,事实上这两个条件还是充分的(为啥会不敢猜啊???),证明我直接贴下题解。
所以这个时候暴力做法就很显然了,像上面提到的,设
- 先不管,直接继承,有
。 - 拼上一个能删空的段,假设这个段的长度为
,有 ,同时限制 中 中 的数量不超过 个且 的数量不超过 ,因为只要不超过就可以把?
替换到合法。
直接做是
显然瓶颈在于第二种转移上,我们尝试形式化地描述出第二种转移。
我们前缀和一下,分别记
且 是 的倍数。 。 。
容易发现每条限制
对于模
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现