7 月做题记录

R7-07-07 07:07:07???
0630T2 - P3549 MUL-Multidrink Ult
题目大意
TL:1s,ML:128MB
给定一棵
- 同一个点不能被遍历两次
要求输出
解答
我记得之前做过一道非常像的题,CF1819C,感觉这两道题不能说是一模一样,只能说是毫无关系。现在开始讲做法。
我们可以现在树上把
那么从前往后解决,跳以
- 从
跳入,遍历完后从 跳出。 - 从
跳入,遍历完后从 的其中一个儿子跳出。 - 从
的其中一个儿子跳入,遍历完后从 的其中一个儿子跳出。 - 从
的其中一个儿子跳入,遍历完后从 跳出。
我们发现情况 3 其实就是情况 1 的逆向版,所以可以合并为 3 种情况。
然后我们可以 DP 解决:设
这个情况的条件就是
是叶子节点即可。 这种情况则可以先跳
,然后跳其中一个不是叶子节点的子树 ,遍历完 子树之后再跳出跳到 的其它叶子节点上,最后从其中一个叶子节点跳出。 所以条件就是:至多只有
个儿子 不满足 且这个 要满足 (即 )。其它儿子都要满足 。 先跳
的叶子节点。这种肯定不劣。然后看有多少个不是叶子节点的子树 。 - 若有
个,那么跳完叶子后就先跳到 ,然后 (逆向 ),遍历完后跨过 跳出去。 - 若有
个,令另外一个儿子为 ,则跳完 的叶子后先 ,然后跳到 ,之后从 开始 ,最后跨过 跳出去。 - 若有
个,因为 是不会给你用 次的,所以无解。
所以条件就是:至多只有
个儿子 不满足 且这些 要满足 。并且如果有 个儿子,那么就不行。 - 若有
这样就可以用 DP 把所有的子树求出可以怎么进怎么出了。
然后因为是要在链上按顺序遍历所有子树的,所以我们再记录一个
:遍历完链上的前 个点的子树,最终停在链上的第 个点是否可行。 :遍历完链上的前 个点的子树,最终停在链上的第 个点的其中一个儿子是否可行。
然后就可以
。因为你是从 的儿子出来的,所以 之前也被遍历过了。并且因为距离 ,所以最终只能跳到 上。 所以条件就是令
成立才行。 g[i][0] |= g[i-1][1] & f[cur][0]
。这里因为跳的距离 ,所以可以选择跳到 上或者跳到 上。 所以条件就是令
或者 成立都行。 g[i][0] |= g[i-1][0] & (f[cur][0] | f[cur][1])
。还是,你只能跳到 上。 所以只能令
才行。 g[i][1] |= g[i-1][1] & f[cur][1]
。还是,你可以选择跳到根上或者儿子上。 所以令
或者 成立都行。 g[i][1] |= g[i-1][0] & (f[cur][1] | f[cur][2])
然后就可以根据 DP 转移来从后从后往前使用 DFS 加上之前的两个 DP 数组记录答案了。无解就是
代码写了 7.38K,其中 1K 模板,1.3K 注释,核心代码也是挺长的。原题上过了,但是联考题他开
0701T2 - XOR and Inversion Ult
题目大意
TL:2s,ML:128MB
给定
1 x
: 将排列中的每个元素替换为 。 2 x
: 重新排列。对于每一个下标 ,操作后下标 处的新元素是操作前下标 处的元素。
其中
本题有多组测试数据。
解答
我们发现,所有的 1 操作是可以合并的,所有的 2 操作也是可以合并的。令之前 1 操作的
考虑
那么我们就可以统计
考虑
然后现在有了 solve(bit, l, r)
为合并 solve(n-1, 0, (1<<n)-1)
然后分治就完了。
然后就可以在线解决了。枚举
后面就是一些优化。因为空间限制 128MB,所以我们可以对桶进行一些优化:考虑到
具体可以这么实现:
1 | int *tong[L]; // * 号不要忘 |
0702 好题 - CF1815D XOR Counting 2600
题目大意
TL:2s,ML:250MB
记
给定整数
记一个序列
求在好的序列
对于一个
每个测试点包含
解答
私人诈骗。但题很好。
首先对
,显然。 ,假如你想让原序列的异或和为 ,那么你可以构造序列 。所以这种情况的异或和集合就是所有 并且和 奇偶性相同的非负整数。 。就是让你求给你两个数 , ,问不同种类的 的和。 我们可以使用递推:设
为 时的答案。那么就可以根据最后一位分类讨论: 为奇数,即最后一位为 ,那么分配情况就只能是 1 奇 1 偶了。那么可以发现 和 有关。但是因为是 1 奇 1 偶,所以最后一位还要多出来个 1。所以还要统计 ,即 时有多少种不同的异或和。于是就可以构造递推式: 为偶数,即最后一位为 。那么就有两种分配情况: - 2 偶,此时可以直接从状态
转移: 。 - 2 奇,因为借了位,此时就要从状态
转移: 。
每项转移的时候就把这两个玩意加起来就可以。
- 2 偶,此时可以直接从状态
最后的答案就是
。 分析一下复杂度:当
为奇数的时候,直接转移没错。而当 为偶数的时候, 从 和 转移过来,容易发现是一个奇数一个偶数的。若 为奇数,那么它的下一层递归就会是 ,就会和 的下一层状态并到一起。若 为奇数,那么它的下一层递归就会是 ,就会和 的下一层状态并到一起。所以时间复杂度正确,为 。这里空间的话我开的 map
,个 乘上 可以过。
0702 好题 - CF1227G Not Same 2600
题目大意
TL:2s,ML:250MB
给定大小为
你需要执行至多
解答
有一种构造方案。可以先给
这样为什么是对的呢?考虑反证法。因为交换列后是相等的,所以交换列前也是相等的。这里考虑
假设现在第
然后看第
然后看第
0702 好题 - P6782 [Ynoi] rplexq
题目大意
TL:1s,ML:128MB
给定一棵
有
解答
对于一些题啊,我只能说他的【数据删除】了也不自知。
首先,这道题可以转化成如下形式:令
- 当
时,可以使用二维数点来做:就相当于是让你求,DFN 序在一段区间、下标序列在一段区间的二维数点。使用 分块数据结构可以使复杂度为 。但是如果直接用普通的存询问方式的话你的空间会 ,炸!但是这道题有一个非常好的性质:就是对于一个 ,所有的 区间是不交的。所以同一个 的所有 区间可以共用一个下标,并且存询问只用在 节点上存,然后遍历树的时候就查这个点的父亲就可以了。这样空间就压到了 ,线性。 - 当
时,能想到的最暴力的方法就是,对于所有 相同的询问,先暴力遍历所有子树,给所有子树染色,再使用莫队 + 对每一个颜色开一个桶统计。这样做固然可以,但是每一次的复杂度 ,炸!所以,可以再把第一种方法用回来,也就是给前 个重儿子使用第一种方法,其它儿子使用第二种方法,这样的时间复杂度就是 ,因为取的是前 个重儿子,所以 是对的。但是为了保证复杂度,就不能在原序列上跑莫队,应该将每一个 离散化后再跑,所以就是 。
然后是一些杂谈,这道题的思路清晰,代码比较好写,但是非常难调。从 2 号晚上写完了就开始调调到了 3 号早晨。另外,我把这个
[续] 线性基专题
P4869 albus 就是要第一个出场 Mas
题目大意
TL:1s,ML:128MB
已知一个长度为
现在 albus 把
给定一个数,那么这个数在序列
其他所有输入均不超过
解答
这道题的题面用人话说就是,你有一个序列
异或和可以想到线性基,然后假设这个线性基有
然后我们现在就要求
最终答案就是
P4839 P 哥的桶 Mas
题目大意
TL:2s,ML:500MB
P 哥现在有
P 哥时不时地会找新球,并把新找的球丢进某个桶里面。我们用
P 哥每次会在特定的桶里面拿出一些球。我们用
注意:P 哥拿出这些球后会把它们物归原位。
解答
线段树上线性基修改、合并。
P11620 [Ynoi] TEST_34 Mas
题目大意
TL:3s,ML:125MB
给你一个长度为 n 的整数序列
解答
这道题似乎是非常简单的 Ynoi。
我们发现,令
P5607 [Ynoi] 无力回天 Mas
题目大意
TL:1s,ML:512MB
你需要维护编号为
共
- 给定
,在编号 的集合插入 ,保证 之前不在这个集合中; - 给定
,问编号 的集合的并的元素个数。
对于
解答
首先,
这道题可以想到类似根号分治状物,但是如果根据集合的被插入次数根号分治那么你就会死,因为后面思路无。正解是根据元素的插入次数对元素根号分治。
对于插入次数
然后对于插入次数
然后就是卡常。首先如果你的第一种分治,直接使用
然后看第二种分治,因为 map,umap,gp_ht
的逆天跟 XL TECHNO -More Dance Remix- 一样大的常数,所以这里要使用手写哈希表。并且要给手写哈希表做对第一维的优化:先遍历询问(这里令所有的
然后当
?T1 - P9844 Paimon Segment Tree Exp
题目大意
TL:4s,ML:256MB
给定数列
记
完成所有操作后,荧进行
请将答案对
解答
差分询问,将其变为
然后后面是我没想到的:线段树维护矩阵。每个矩阵维护
然后就可以根据矩阵乘法构造矩阵来乘了。因为这玩意是满足结合律的,所以 lzytag 使用矩阵维护完全没问题。
同时也不要忘了给剩下的区间执行
这是 M4T21X 第一次出现在我的代码里面
NOIP Mas 题训练
P11364 2024 树上查询 Mas
题目大意
TL:2s,ML:1GB
给定一棵
除此之外,再定义
小 N 对这棵树提出了
你的任务是帮助小 S 来回答这些询问。
解答
因为一个区间,往外扩展的元素越多,公共 LCA 的深度就会越浅,并且众所周知,
然后现在就要求和
然后做两次扫描线取
P3960 2017 列队 Mas
题目大意
TL:2s,ML:500MB
前段时间,Sylvia
参加了学校的军训。众所周知,军训的时候需要站方阵。
Sylvia 所在的方阵中有
为了便于管理,教官在训练开始时,按照从前到后,从左到右的顺序给方阵中 的学生从
然而在练习方阵的时候,经常会有学生因为各种各样的事情需要离队。在一天 中,一共发生了
在有学生离队后,队伍中出现了一个空位。为了队伍的整齐,教官会依次下达 这样的两条指令:
- 向左看齐。这时第一列保持不动,所有学生向左填补空缺。不难发现在这条 指令之后,空位在第
行第 列。 - 向前看齐。这时第一行保持不动,所有学生向前填补空缺。不难发现在这条 指令之后,空位在第
行第 列。
教官规定不能有两个或更多学生同时离队。即在前一个离队的学生归队之后, 下一个学生才能离队。因此在每一个离队的学生要归队时,队伍中有且仅有第
因为站方阵真的很无聊,所以 Sylvia
想要计算每一次离队事件中,离队的同学 的编号是多少。
注意:每一个同学的编号不会随着离队事件的发生而改变,在发生离队事件后方阵中同学的编号可能是乱序的。
解答
因为修改最多只有
但是因为元素个数太多,你是不可能每一行都开一个暴力维护元素的平衡树的。还是利用修改最多
每删一个位置
这道题不好,使我调 3、4 个小时调到半夜。然后调完了之后就去点外卖吃羊肉串去了。羊肉串好吃。
P1084 2012 疫情控制 Mas
题目大意
TL:2s,ML:128MB
H 国有
H 国的首都爆发了一种危害性极高的传染病。当局为了控制疫情,不让疫情扩散到边境城市(叶子节点所表示的城市),决定动用军队在一些城市建立检查点,使得从首都到边境城市的每一条路径上都至少有一个检查点,边境城市也可以建立检查点。但特别要注意的是,首都是不能建立检查点的。
现在,在 H 国的一些城市中已经驻扎有军队,且一个城市可以驻扎多个军队。一支军队可以在有道路连接的城市间移动,并在除首都以外的任意一个城市建立检查点,且只能在一个城市建立检查点。一支军队经过一条道路从一个城市移动到另一个城市所需要的时间等于道路的长度
请问最少需要多少个小时才能控制疫情。注意:不同的军队可以同时移动。
保证军队不会驻扎在首都。
解答
哦对,我要去下歌了,上次打杂音均衡器搞到两首好歌去把他们下下来。稍等。
这道题的话假设可以在
对于那些不能到根上面的点,我们使用倍增求出它们最终会到达哪些点。然后对这些点按照 DFN 序排序,排序之后遍历它们会覆盖哪些叶子节点(要打 vis 标记,所以要按照 DFN 序排序)。然后对于那些没有被覆盖的叶子节点,求出那些叶子节点属于根的哪一个子树。然后就会得到一个
这个时候,就是已经到根上面的结点发挥作用的时候了。对于每一个节点
现在有了其它的点了。你就对这些点的可移动距离排个序,然后 check
的时间复杂度为
哦对,还有判无解。这个比较明显吧,就是当且仅当点数小于根的子树个数的时候无解。
P3959 2017 宝藏 Mas
题目大意
TL:1s,ML:250MB
参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了
小明决心亲自前往挖掘所有宝藏屋中的宝藏。但是,每个宝藏屋距离地面都很远,也就是说,从地面打通一条到某个宝藏屋的道路是很困难的,而开发宝藏屋之间的道路则相对容易很多。
小明的决心感动了考古挖掘的赞助商,赞助商决定免费赞助他打通一条从地面到某个宝藏屋的通道,通往哪个宝藏屋则由小明来决定。
在此基础上,小明还需要考虑如何开凿宝藏屋之间的道路。已经开凿出的道路可以 任意通行不消耗代价。每开凿出一条新道路,小明就会与考古队一起挖掘出由该条道路所能到达的宝藏屋的宝藏。另外,小明不想开发无用道路,即两个已经被挖掘过的宝藏屋之间的道路无需再开发。
新开发一条道路的代价是
请你编写程序为小明选定由赞助商打通的宝藏屋和之后开凿的道路,使得工程总代价最小,并输出这个最小值。
解答
想的时候没有看到 结果最后看到了之后还是没有想出来。
因为
然后就可以列转移方程:
其中
那么有人就要问了,如果你这个
并且,因为设的
P7962 2021 方差 Mas
题目大意
TL:1s,ML:512MB
给定长度为
其中方差的定义为:数列中每个数与平均值的差的平方的平均值。更形式化地说,方差的定义为
测试点编号 | ||
---|---|---|
解答
看
令差分
因为根据定义,方差只和每一个数和平均值的差有关,所以我们可以将所有数均减去
可以发现最后一个式子的前面部分是固定的,要想让其取到最小值就要让后面的式子最小。因为可以发现越靠近中间
又因为
这里使用原式子
- 若插入左边,则
。 - 若插入右边,则
。
然后初始设
然后最后的答案就是
为了优化时间复杂度,可以看限制:因为
P2435 染色 Mas
题目大意
TL:2s,ML:125MB
有一个
答案对
测试点编号 | |||
---|---|---|---|
对于
请注意,
解答
对于其它数据点,因为
对于
P3547 [POI] CEN-Price List Ult
题目大意
TL:1s,ML:128MB
在这个国家的
直接通过铁路连接的任意两个城镇之间的票价为
目前,Byteotia 的交通市场正在发生变化。
截至目前,BSR 面临着一个新的竞争对手:Byteotian Airlines (BA)。
BA 计划在一些城镇对之间运营航班。
由于 Byteotian 铁路相当舒适,BA 董事会决定只在那些没有直接铁路连接的城镇对之间运营航班。出于经济原因,BA 只会在那些需要恰好一次换乘的城镇之间飞行。
每张此类航班的票价为
为了帮助 Byteotia 的市民规划他们的旅行,Byteotian 交通部 (BMT) 决定发行传单,说明所有可能城镇之间的最便宜路线。任意数量的直接铁路或飞机连接的序列被称为路线。名叫 Byteasar 的 BMT 官员被委派准备传单的价格表。
你能帮他写一个程序来确定正确的价格吗?
让我们明确一下,Byteotia 的所有连接,无论是铁路还是飞机,都是双向的。
标准输入的第一行包含五个整数,
数字
为简化起见,我们将 Byteotia 的城镇编号为
接下来的
你可以假设所有城镇都可以通过铁路从编号为
解答
首先,答案只有可能是以下三种情况(令
只坐铁路。答案就是
。 先坐飞机,然后最后可能会坐铁路。乘坐路线就是最短路路线。答案就是
。前两种情况均可以使用 BFS 或 Dijkstra 解决。 全部坐飞机,根本就不坐铁路。这种就不能直接算了。
先考虑暴力,可以 BFS,设当前被遍历到的点为
,然后枚举 的每一个出点 ,再枚举 的每一个出点 。然后看 是否有边。若无边,那么就更新答案,并将 push
进queue
里面。时间复杂度。 然后再想,因为你
第一次被更新到答案的时候,后面它被更新时的答案就已经没有它第一次被更新的时候优了。也就是说,边 已经在枚举第二条边方面上面已经没有用了。可以删除。或者说,此时你可以把 连接的所有边在枚举第二条边方面上面废了。但是枚举第一条边的时候还没废,不能删。所以这里我枚举第一条边用 vector
存,枚举第二条边用带pre
的链式前向星存,这样就可以删边了。然后对于时间复杂度,我们设
为中转边,那么优化后的时间复杂度就是 ,又因为 。所以时间复杂度可以接受。
P4234 最小差值生成树 Mas
题目大意
TL:3s,ML:256MB
给定一个点标号从
解答
令这个差值为
我们定某条边边权为最大值
因为这些
然后这个东西就可以使用线段树分治来解了。就看是否有一个
时间复杂度 (其实好像不用神机也可以过的)
线头 DP 问题
P5999 [CEOI] kangaroo Mas
题目大意
TL:1s,ML:128MB
有一个园子,里面有
具体地,如果他现在在
那么如果
,就必须有 ; 如果
,就必须有 。
问从
两个路线不同,当且仅当草丛被访问的顺序不同。
保证至少有一种方案。
初始时可以往任意方向跳。
对于
解答
我们令
先不考虑
- 一个连通块里面插入数(延续连续段):这种操作不行。因为这里加数是从小到大加的,如果插入,后面再插入一个比它大的,那么就违反了题目要求。
- 两个连通块间新建一个块(新建连续段):完全可以。因为
个连通块有 个空(包含首尾),那么 。 - 两个连通块通过这个数合并(合并连续段):也完全可以。因为两个连通块的首尾都比这个数小(可以根据加数顺序得到),所以
,合法。因为 个连通块有 个空(不包含首尾,因为包含首尾就不能满足),那么 。
现在考虑包含
当
当
当
当
总结可得:
使用
P9197 [JOI] 摩天大楼 Mas
题目大意
TL:2s,ML:512MB
将互不相同的
假设排列为
求满足题意的排列的方案数对
对于所有数据,
解答
因为
令
然后当有
初始设置
那么就可以开始考虑以下
- 延续连续段:每次在一个段的左或右边添加数,那么空就有
个。 。然后 从 的情况单独解决。 - 插入连续段:每次在空中添加数。那么空就有
个。 。然后 从 的情况单独解决。 - 合并连续段:每次合并两个连续段。那么空就有
个。 。
最后答案就是
P7967 [COCI] Magneti Mas
题目大意
TL:1s,ML:512MB
给定
求所有磁铁互不吸引的方案总数对
对于
解答
为了更好地分辨,这里称题目中的「空位」为点。
我们可以把这道题先看成两部分:第一部分是将所有磁铁按照自己定的顺序紧密排列到点上,第二部分是将剩下的那些点插入这
对于第二部分,设某一种紧密排列所占用的点个数为
我们依然设
依然考虑以下
- 延续连续段。一共有
个头尾,所以 。 - 插入连续段。一共有
个空。所以 。 - 合并连续段。一共有
个空可供合并。所以 。
然后依然是
树哈希题目
UOJ763 【模板】树哈希
题目大意
TL:5s,ML:512MB
这是一道模板题。
给定一棵以点
两棵有根树
对于所有数据,
解答
我们构造以每一个点
这里我取的
1 | mt19937_64 rnd(time(0)); |
这样可以对
然后就看一共有多少种 unique
操作实现。
P5043 【模板】树同构 Exp
题目大意
TL:1s,ML:250MB
树是一种很常见的数据结构。
我们把
若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树。
对于两个树
现在,给你
对于
解答
树同构可想到树哈希。不过现在因为是无根树,所以这里要求以每一个点
然后暴力比较即可。我用的
0711 好题 - CF2118F Swifts and Swaps 3100
题目大意
TL:6s,ML:512MB
给你长度为
这两个数组只包含从
您可以重复对
- 将数组向左循环移动
- 交换两个相邻的元素,如果它们的差至少为
。
能否将第一个数组转换成第二个数组?
解答
因为差至少为
那么首先就可以猜想:如果所有 YES
,但实际上这是错误的。举一个反例:
那么可以得出来,两个数循环同构,那么就要必须满足相对位置相等并且种类正确。种类正确指的是递归下去的顺序和个数完全相等。那么关系就可以看成一棵树,两棵树需要同构并且儿子顺序相等。所以这里的树哈希就不能使用平常的基于 set
的树哈希,应该使用基于 vector
的树哈希。
具体实现的话,就可以维护一个桶 vector
实现。然后让 map <vector<int>, int>
来维护。
维护到了
令
P12865 [JOI] 冒泡排序机 Mas
题目大意
TL:2s,ML:1GB
JOI 君——一名算法工程师,开发了冒泡排序机。
冒泡排序机操作长为
对于
(按此顺序),若 ,交换 的值。
为了使冒泡排序机更博人眼球,JOI 君决定加入以下功能:
当按钮贰被按下时,给定整数
作为输入(须满足 ),机器会输出 的值。
给定整数序列的初值和长度为
; ; ;
解答
根据冒泡排序的性质,因为每一次冒泡操作其实是将前缀最大值往右边移动,那么相应的,肯定就会有元素被移到左边去。分析一会可以发现,第一次后前
根据这个,并且因为询问可差分,所以我们就可以使用可持久化线段树。这棵树可以用来找任意一段前缀第
顺带一提,因为这玩意是动态开点的,并且 ML 1 个 G,所以不用离散化都可以。
CF1083E The Fair Nut and Rectangles 2400
题目大意
TL:2s,ML:250MB
给定
保证不存在嵌套的矩形。
解答
先给这些矩形按照
设
然后发现
因为不会写那个什么维护凸包的方法,所以只会写李超线段树。并且我在写完调的时候才发现一个东西:李超线段树是可以通过动态开点使得空间复杂度
随即通过此题。
P5666 [CSP-S] 树的重心 Mas
题目大意
TL:4s,ML:250MB
小简单正在学习离散数学,今天的内容是图论基础,在课上他做了如下两条笔记:
- 一个大小为
的树由 个结点与 条无向边构成,且满足任意两个结点间有且仅有一条简单路径。在树中删去一个结点及与它关联的边,树将分裂为若干个子树;而在树中删去一条边(保留关联结点,下同),树将分裂为恰好两个子树。 - 对于一个大小为
的树与任意一个树中结点 ,称 是该树的重心当且仅当在树中删去 及与它关联的边后,分裂出的所有子树的大小均不超过 (其中 是下取整函数)。对于包含至少一个结点的树,它的重心只可能有 1 或 2 个。
课后老师给出了一个大小为
上式中,
小简单觉得作业并不简单,只好向你求助,请你教教他。
本题包含多组测试数据。
对于所有测试点:
解答
君を喪っても まだ翔べるかが
这道题似乎是最近做的题里面最难的一道题。可以想到我没有做出来。
如果一个点不是一棵树的重心,那么重心就会在这棵树的重儿子的子树内。
如果不删边的话,想快速求整棵树的重心,我们可以预处理倍增数组,即每一个点
然后现在,题目要求我们要删边了。那么我们肯定又要做一遍 DFS 了。这次 DFS 的作用是换根。每次 DFS 到一条边的时候
首先,如果
注意,所有边遍历完了之后要将
理解 + 写了这道题花了一下午……要似了……
P5226 [SCOI] 小凸解密码 Mas
题目大意
TL:2s,ML:128MB
小凸得到了一个密码盘,密码盘被等分成 +
或 *
首先,选择一个位置开始,顺时针地将数字和符号分别记在数组
- 当
时: - 若
为 +
, - 若
为 *
,
- 若
操作完成后,可以得到一个长度为
现在小凸得到了一份指令表,指令表上有 2 种操作。一种指令是修改操作,即改变原来密码盘上一个位置的数字和符号。另一种指令是询问操作,具体如下:
- 首先从指令给出的位置开始完成解密,得到答案环。
- 答案环上会有一些
连在一起,将这些连在一起的 称为零区间,找出其中距离 最远的那个零区间,输出这个距离(零区间和 的距离定义为:零区间内所有 到 距离中的最小值)。
- 若第一个整数为
1
,代表本行对应指令为修改操作,之后依次有两个整数和一个字符 ,分别代表修改的位置,以及修改后该位置的数字和字符。 - 若第一个整数为
2
,代表本行对应指令位询问操作,之后有一个整数,代表本次操作中解密的开始位置。
密码盘上的位置标号为
解答
首先修改密码盘是很简单的,一次最多就会修改两个位置。
然后对于查询,那么应该是有这样一个操作,假如说从
那么查询的话,我们可以二分寻找答案:对于距离
一段区间内是否有这个结构可以使用线段树来维护。因为这玩意有可结合性。
P3295 [SCOI] 萌萌哒 Mas
题目大意
TL:1s,ML:125MB
一个长度为
比如
解答
暴力做法:对于每一组区间
于是乎,我欲优化。因为离线,而且最重要的一点是,两段区间是相同的。所以我们可以考虑将先合并大区间,然后再把大区间拆成小区间下放到每一个节点上。容易想到在线段树上面做。但是这个是不好做的,而有一种和线段树上做并查集的思想很像的方法就是:将每一个区间按照二进制拆成
操作完了之后就可以按照区间长度从大到小下放合并的信息了。令
然后最后就统计组
优化后时间复杂度
树上问题的一些
P1600 [NOIP] 天天爱跑步 Exp
题目大意
TL:2s,ML:512MB
小 C 同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。《天天爱跑步》是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。
这个游戏的地图可以看作一棵包含
现在有
小 C 想知道游戏的活跃度,所以在每个结点上都放置了一个观察员。在结点
注意:我们认为一个玩家到达自己的终点后该玩家就会结束游戏,他不能等待一 段时间后再被观察员观察到。 即对于把结点
解答
对于一个玩家从
对于一个玩家从
要使在时刻
那么这个时候有人就要说了:欸那么如果这个人跑到
然后对于
P4211 [LNOI] LCA Mas
题目大意
TL:1s,ML:125MB
给出一个
一个点的深度定义为这个节点到根的距离
设
有
解答
这里使用了一个 Trick:
但是对于每一个
CF696E …Wait for it… 3000
题目大意
TL:3s,ML:256MB
给定一个
对于两个物品,如果它们的权值不同,那么权值更小的物品更好;如果它们的权值相同,那么所在节点编号
1 u v k
:对于树上的一条简单路径 (, ),删除路径上所有物品中最好的 个物品,并将这些物品的编号从最好到最不好的顺序输出; 2 v x
:对于一棵子树,将该子树内所有物品权值加。
解答
这道题可以使用树链剖分 + 线段树就可以实现区间加和查找路径上最小值的操作。然后删除最小值就相当于是赋一个最小值为
如果普通地将每一个物品放到该节点上,那么就要在线段树的叶子节点上面维护一个堆,非常的不好写。这里使用先将所有物品按照 dfn 序排序,然后使用 lower_bound
查找修改范围就可以代替堆了。
这个私人 CF 我刚刚写完这道题它就崩了,我到现在都不知道我调出来的是不是对的。现在都 6 点了我还在学校里面,到时候别上晚自习了这个私人 CF 还没好。就只能留校了???从教练的角度上来看我现在又没有写完这道题,没办法和教练交差,心里面有一万头【数据删除】在奔腾。
喜报。第二天,即 R7-07-25,中午 12:06 正式过了此题。
CF1823F Random Walk 2600
题目大意
树上从
首先,整个树可以被看作一个拥有
在一个有向图中,有向边
那么我们令
- 边
不在 路径上。那么你走了 就必定要走 ,所以 。 - 边
在 路径上。因为一条路径不管你怎么走,不管是简单路径还是复杂路径,走 的次数一定比走 的次数多 。因为你要走到 。
所以可以从
最终答案
解答
0728 好题 - ARC197E Four Square Tiles 2647
题目大意
TL:2s,ML:1GB
给你三个整数
求把四个
方形瓷砖之间是完全相同的,也就是说两个摆放方案不同当且仅当存在一个方格在一种方案里被瓷砖覆盖,在另一种方案里没有。
输出答案对
多组数据。第一行一个整数
对于每组数据,一行三个整数
解答
因为 黄红蓝绿。每一个正方形的代表坐标为其左上角的顶点。
令网格长
解
但是这样的话就会出现正方形 1 和正方形 4 重合的情况。为了不让对角的两个正方形重合,我们算出对角的两个正方形重合的情况种数,不重合的就是总情况数减去重合情况数了。因为正方形 1、4 重合和正方形 2、3 重合的答案相同,所以这里只算正方形 1、4 重合的情况。
那么因为重合了,所以引进式
所以总答案就是
- Title: 7 月做题记录
- Author: 11490DX
- Created at : 2025-07-01 15:06:39
- Updated at : 2025-07-29 17:16:17
- Link: https://11490dx.net/2025/07/01/R707-practice-log/
- License: This work is licensed under CC BY-NC-SA 4.0.