名字贼长的玩意练习记录 Part. R703/04

注:* 号代表 VP(虚拟参赛)场。
1681E 2600 Labyrinth Adventures
题目大意
有一个
这个方格图被分成了
层与层之间有墙隔开,但每层都有两个门,分别分布在该层顶部和右侧,门是双向的。
现在给出这些门的坐标,有
解答
可以考虑将每一个门作为节点,一层一层的连边,建图。
然后现在就要求的是第
最暴力的方法就是建图,每次查找的时候跑 Dijkstra。
而比较好的方法就是,使用线段树维护区间 pushup
的时候就枚举所有情况然后取最小值就可以了。
1428E 2200 Carrots for Rabbits
题目大意
新加坡动物园里有一些兔。为了喂养他们,管理员买了
兔很难拿稳大萝卜,也很难咽下大萝卜,所以吃掉一个长度为
现在请你帮助管理员切这些萝卜,以最小化兔吃萝卜的总时间。
数据范围:
解答
这道题最开始和我一样想二分做法是没有前途的。
应该使用贪心算法。我们可以从
设
那么就维护一个堆,堆里面 push
进所有的 push
进
909D 2100 Colorful Points
题目大意
给你一组直线上的点。每个点都有一种颜色(用字母表示)。每个点最多有两个邻居,一个来自左边,一个来自右边。
您可以对这组点执行一系列操作。在一次操作中,我们会删除所有有一个与该点的颜色不同的邻居点的点。删除点是同时进行的,也就是说,首先确定哪些点需要删除,然后再删除它们。然后再执行下一个操作等。如果某个操作不会删除任何点,则不能执行该操作。
您需要执行多少次操作,直到下一次操作没有要删除的点为止?
解答
这道题暴力枚举的复杂度是
回顾删点的过程。每一个点被删的条件是这个点不同于左右两个点的任意一个。所以可以把这些点分成若干个段,每一个段的颜色相同。比如样例 2 aabcaa
就可以被分为
然后对于每一个块,中间的块的左右两端点肯定要被删,所以长度
然后删除之后,就可以合并。这个可以使用 vector
+ pair<int, char>
解决。
每次操作的复杂度就是块的数量,而因为每一次要删除
702E 2100 Analysis of Pathes in Functional Graph
题目大意
有一个
解答
我脑梗了。
倍增即可。
2074G Div.3 最新最热 Game With Triangles: Season 2
题目大意目前官方翻译没有出来。
解答
首先破环为 2 倍的链,然后可以区间 dp。设
然后就是最关键的转移:
- 没有以
为两端点的三角形。 。 - 有以
为两端点的三角形。然后枚举中间端点 使其成为这个三角形的第三个端点。于是 。
然后答案就出来了。
想吐槽这场的 D 题的 pretest 真的太弱了,没开 long long 都能过 pretest,导致 FST。想把造数据的问候全家啊啊啊啊啊啊
CF553B Kyoya and Permutation 1900
题目大意
定义一个长度为
Kyota Ootori 刚刚学习了排列的循环表示法。定义排列
显然,我们可以将一个排列划分成多个循环。例如
对于一个长度不为
现在,Kyota 发现,如果我们去掉一个排列的标准循环表示法中的括号,我们将得到另一个排列。比如,由
他还发现,将某些排列的标准循环表示法中的括号去除后,得到的排列和原排列是一样的。我们称这种排列为“好的排列”。他按字典序递增的顺序在纸上写下了长度为
解答
容易发现,如果一个排列是好的排列,那么发生在每一个位置上的 swap 最多只有 1 次。并且 swap 是相邻两个数的。因为如果超过 3 个数的话除了原排列就没有别的了。
那么就可以设
然后求的时候因为保证一定存在,所以看
CF750D New Year and Fireworks 1900
题目大意
烟花绽放时分为
解答
性质,性质,还是性质。这些低难题科技很少,大多数都是找性质。
正解其实很暴力。因为
CF463E Caisa and Tree 2100
题目大意
给你一个根为
,表示查询从 到根这条根链上是否有点 ,使 和 的 。若有,则输出 ,否则输出 。若存在多个答案,选择深度最大的 。 ,即修改 。
保证
解答
这道题评分两极分化了。CF 上面 2100,洛谷上面是紫提。(我不会打)可能洛谷认为的正解是别的东西,但是我这个方法切过去了,所以建议降绿/蓝。
首先,最明显的性质:
而且,因为修改数量
根据题目中所言「存在 但是当初我怀疑内存会被卡
CF1147B Chladni Figure 1900
题目大意
稻中有一个圆盘,圆周长为
圆盘上有
稻香想知道她的图像是否是旋转对称的,即是否存在一个整数
解答
首先,可以枚举因数,然后暴力 check。因为因数最多
但是因为标签里面有个字符串匹配,于是我就想可不可以用字符串。这里,我口胡了一个做法。因为现在已经 17:45 了所以准备回去看能不能实现。
我们处理每一个点连出去的点的距离集合,两个距离相同的集合就是同一种字符。(或者说可以使用其它方法分配字符?)然后分配字符完了后就可以找这个字符串是否存在周期,即循环节了。这个可以使用 KMP,我们求出
CF1257E The Contest 2000
题目大意
给出三个集合
称将一个集合里的元素删除并加入到另一个集合中为一次操作。请用最少的操作次数使得:
包含 开头若干个元素(可以为空); 包含 末尾若干个元素(可以为空); 包含剩下的所有元素。
解答
首先,我们可以将全集分为
那么我们可以得出来,对于每一对
容易发现和
CF2103D Div.2 最新最热 Local Construction
题目大意
数组
和 和 ,或 和 ,或 和 。
同样地,如果以下条件至少有一个成立,那么数组
和 和 ,或 和 ,或 和 。
请注意,只有一个元素的数组不定义局部最小值和最大值。
有一个隐藏排列
- 操作 1 - 删除
中所有不是局部最小值的元素。 - 操作 2 - 删除
中所有不是局部最大值的元素。
更具体地说,操作 1 在每次奇数迭代中执行,操作 2 在每次偶数迭代中执行,直到
对于每个索引
可以证明,
给你一个数组
保证数组
解答
这道题我赛时思路就想错了。
首先,因为迭代次数少于
对于
对于
然后
直到最后只剩下一个
CF2103E Div.2 最新最热 Keep the Sum
题目大意
给你一个整数
- 选择两个不同的索引
和 ( 和 ),使得 . - 选择满足
的整数 。 - 将
减少 ,将 增加 。换句话说,更新 和 。
需要注意的是,
你的任务是确定是否有可能通过上述操作使数组
可以证明,如果可以通过上述操作使数组非递减,则存在一个最多使用
解答
又是一道构造题……
首先,判定何时无解。那么肯定是不存在任何一对
发现我们可以为了让这个序列有序,可以使用次数为
如何实现交换操作?设现在有
所以我们要尽量让前面两个数固定下来,不用最后再交换它们的位置。发现可以将这两个数分别放在第一个位置,值为
那么假设现在有
CF1762D 2100 GCD Queries
题目大意
这是一道交互题,
有一个
? i j
:询问和 两个元素( ),交互器会返回两个元素的 。
询问以后,你需要给出两个下标 ! x y
,如果答案正确,交互器会返回
解答
根据
- 当
, 。因为若 , 互不相等得出来的结果会不一样,矛盾。 - 当
, 。因为若 , ,又因为 ,故矛盾。 - 当
, 。原因同理。
只需询问
CF1167F Scalar Queries 2300
题目大意
给出一个数组
定义函数
- 定义数组
,其中 - 将
按从小到大排序 - 则此时函数的值是
请计算对于所有满足
由于结果可能很大,请输出对
解答
我们可以对每一个数拆开算贡献。
对于数
第一项为
如何快速求第一项和第二项?我们令
最后综合答案即可。
CF2106G1, G2 Div.3 最新最热 Baudelaire
题目大意
交互题。
波德莱尔非常富有,因此他买了一棵大小为
书呆子牛看到了这棵树,并爱上了它。但是,计算机科学专业的薪水不够高,所以他买不起这棵树。波德莱尔决定和书呆子牛玩一个游戏,如果他赢了,就把这棵树送给他。
牛呆子不知道哪个节点是根,也不知道节点的值。不过,他可以向波德莱尔提出两种询问:
:设 为从树根到节点 的路径上所有节点的值之和。牛书呆子可以选择一个整数 。 和 节点 ,他将得到值 。 :波德莱尔将切换节点 的值。具体来说,如果 的值是 ,它就会变成 ,反之亦然。
如果 “牛书呆子 “在
简单版:整棵树是以
困难版:整棵树形态任意。
解答
本解答分为简单版和困难版两版。
对于简单版,我们可以分成两段:首先求出树根,然后根据树根推出所有点的权值。第二段是容易的,查询次数
由于查询的是
因为点
找到根节点后,先把所有点权值问一遍,然后 DFS 一下树就可以得出权值了。
然后对于困难版,我们需要执行类似简单版的操作。
可以考虑先选一个关键点,然后对这个点执行问询,问询出这个点的父节点是哪个(如果没有就说明这个点是根)。然后其它儿子就都消失掉,然后再在父节点的连通块里面选一个关键点继续问询……直到这个关键点没有父节点(即这个关键点为根)或是这个关键点没有邻居。
容易想到我们需要选取这个树的重心作为关键点,因为这样做每一次操作至少会使一棵树的大小减去一半。那么总询问次数就是
CF2040E* 2100 Control of Randomness
题目大意
给定一棵树,树上有
我们在某个顶点
- 当
为奇数时,机器人会向顶点 的方向移动到相邻的节点。 - 当
为偶数时,如果你愿意支付一枚硬币并且还有剩余的硬币,则机器人会向顶点 的方向移动到相邻的节点;否则,机器人将随机选择一个相邻的节点移动。
当机器人到达顶点
你的任务是解决
具体来说,令
保证输入的边构成一棵树,并且所有测试用例的
解答
诈骗期望。根本不需要
我们可以把奇偶操作放到一起看,把两个操作合为一个整体。
那么首先考虑不使用硬币,设波特初始时所在的点为
而如果使用硬币,那么这一轮它会直接走到
于是我们可以暴力跳爷爷,然后对于每一个点都记录
而在跳爷爷的过程中若遇到
F 题是 Burnside 引理会不了一点
- Title: 名字贼长的玩意练习记录 Part. R703/04
- Author: 11490DX
- Created at : 2025-03-07 20:57:56
- Updated at : 2025-04-26 11:50:15
- Link: https://11490dx.net/2025/03/07/R703-cfra-practice-log/
- License: This work is licensed under CC BY-NC-SA 4.0.