ad-hoc 题目合集
1|0APC001F
一眼不可做,直接对边权处理是没有思路的。于是考虑边权转点权。
令
考虑现在对链的异或操作变为了什么,设当前对链
,此时 ,此时
所以每次对链的操作转化为了对两个点操作,此时边权为
不难想到每次最多只会让两个点的值变
而
2|0AGC018E
三个矩形乱跑显然难搞,那就一点点推吧。
1. 从一个点到另一个点
不妨令一个点的坐标为
2. 从一个点到一个矩形
首先考虑暴力咋搞,令
而矩形是可以被拆分成四个
然后考虑快速计算
然后你就发现
所以答案变为
加一减一消去了,所以是上边的形式。
这让一个矩形转变成了四个点
3. 从一个矩形到一个矩形
先大力写出暴力式子。
然后用上文中的式子去掉两重循环
在这里只写出一个结果。注意到从一个矩形到点和一个点到矩形的方案数是显然等价的,所以进一步写为
然后注意到上文在拆分求和以后依然是四个点到矩形的形式,依然可以套用上式化简。最后能把两个矩形都转化为四个点,做
4. 从一个矩形经过一个矩形到一个矩形
由于上文中所述的矩形转点思想(姑且这么说吧 qwq),我们只需要考虑一个点经过一个矩形到另一个点的方案数即可。
整个过程可以拆分为两部分
- 从起点到第二个矩形的边界
- 从第二个矩形的边界到下一个点
由于要求最短路径,所以进入矩形的边界一定是下/左边界。枚举下边界和左边界上的点,然后再跑一次点到点即可。
5. 从一个矩形经过一个矩形到一个矩形的路径长度之和
终于到了本题要干的事情了。
考虑在 4 上做一些修改,把整个过程拆成三部分
- 从起点到第二个矩形的边界
- 从第二个矩形的下/左边界到第二个矩形的上/右边界
- 从第二个矩形的边界到下一个点
观察从第二个矩形的边界跑到第二个矩形的边界这一过程,假设我们知道当前的两个点是
3|0CF1707E
第一道 3500。
下文中,我们称调用
首先看到这种一眼不可做的题先猜性质 qwq。
注意到每次操作区间带有可拆分的性质。即
如何证明?考虑归纳。
首先
当
同理可推广到高次情况。
现在咋做呢?
我们设
问题转化为如何快速求
时间复杂度
4|0P6982
首先发现
假设我们知道了一个返回值为
首先取反第一位,然后对剩下的第
- 返回值为
,说明该位正确性与第一位不同。 - 返回值为
,说明该位正确性与第一位相同。
在你得到了所有位与第一位的正确性关系后,将所有正确性不同的取反,做一次询问,返回值为
接下来考虑如何得到一个返回值为
大力随机!
考虑正确性,也就是说,我们要从
5|0P5101
首先题面对折叠给了个非常反人类的定义,这里来简化一下
- 选择一个左端点是原串左端点的长度为偶数的回文串,保留其右半部分。
- 选择一个右端点是原串右端点的长度为偶数的回文串,保留其左半部分并将其放到开头,然后将原串其余部分翻转后接在其后边。
并且由于厚度,染色操作必然在翻折前进行。
有一个显然的性质是,一个串最后能被缩到长度为
考虑进一步推广,一个串能被缩短到长度为
若存在一个连续段长度为奇数且不在首位,则将其两端缩起来后,必定为
又注意到每个长度为偶数的连续段可以拆成若干个长度为
接下来对每个小段进行考虑,我们钦定
- 如果小段内都为
,不更改。 - 如果小段内其中一个颜色为
,将另一根线也改为 不劣。 - 如果小段的颜色都不为
,则需要根据另一种颜色来决定更改。
设对于颜色
暴力枚举做到
枚举每个包括
6|0ABC235Ex
由于我们无法定义点集,我们不妨建立一个集合和整数的函数关系
不妨简化条件,首先设原图是一个树,且边权互不相同。
我们将边权排序并从小到大考虑每条边,对于当前边
-
我们让所有对
进行的操作选择的 都小于 的边权:这意味着两个连通块进行的操作是独立的,故答案为 -
存在一个操作选择了一个不小于
的边权 :这意味着两个连通块必定被染红。
因此,我们将其这两个多项式合并的答案为
到这一步我们其实也看出了为什么要让边权互不相同,如果存在相同边权,那么选择不小于
不妨设对于一个连通块
最后使原图不是树,我们将证明,
设一条不在最小生成树上的边
由于一共合并
官方说复杂度可以证明是
考虑构造一个复杂度的上界,对于合并为大小为
所以最坏的合并方案是一直合并两个大小相同的点集。将会发生
7|0P4672
细节很多的一道思维题。
上来一个直观的感受是,如果我们能找到两个根,我们就能通过 bfs 算距离把树划分为两半,然后检查两边的树是否同构。更进一步的,我们发现如果能找到一对对应点,我们也能够把树划分成两半。
现在的问题是怎么找到这对对应点。考虑环的形成过程,我们发现,对于一个合法的图,当我们删去一个环的时候,整个图会断成若干个连通块,且每个连通块中最多包含两个环上的点,这两个点一定是对应点。原因是一个环环上的边一定是原树上的若干条对称树边,而父亲到儿子的路径唯一,若合法一定不会出现断开环后一对有父子关系且在环上的点出现在同一连通块中。
现在的问题有两个,一个是特殊的情况,另一个是如何判定树同构。
首先考虑后者,对两边 bfs 重标号,检查父子关系即可。
然后考虑前者,分情况考虑。
-
没有环。
此时整个图是一条单链,我们判断点数奇偶性即可。
-
不存在有两个环上的点的连通块。
考虑此时图的形态,一定是一个大环上套了一堆链。我们继续讨论。
-
不存在两个度数为
的点。意味着图是一个大环,直接判断点数奇偶性即可。
-
存在两个度数为
的点。把这两个点当根跑上面的判定即可。
-
当然还有一些情况,比如两边不是树,两边点数不同等等,也要一一判掉,前者可以判点数、叶子数和边数的关系,后者 bfs 的时候检查一下即可。
8|0LOJ6669
我们首先可以做
那么我们考虑一层一层加点,对于每一次加点,上面的树的结构已知。问题转化为快速求其上面的点是哪个。考虑维护一个树剖结构,每次询问根节点所在的链底,通过这些点的深度和距离得出 lca 的深度。由于这是一条重链,且为二叉树,所以我们直接去 lca 的轻儿子递归,边界条件为深度相差为
考虑询问次数。由于重链剖分的性质我们知道重链总数是
9|0P7515
令
注意到
构造方案可以直接通过差分约束解决。
10|0CF827F
注意到一个性质是,如果我们在
但是直接维护点是不好维护的,因为以最小时间走到一个点会出现走不出去的情况。但是边是可以维护的,以最短时间到达一条边意味着以后任何一个奇偶性相同时刻都能到达该边。因此我们试图把一个点
接下来考察一个类 dijkstra 状物。对于一个时刻
11|0LOJ3985
大概是这三年以来见到过的最厉害的题,思路自然而不套路。
下文中令
首先我们考虑一个限制为
现在我们进军
这个做法似乎没啥前途,我们不妨跳出这个来想一想。题目的要求实际上是要我们求
打表发现通过这个方法获得
其实到了这一步以后正解自然的已经出来了。结合前两种做法我们可以把序列长度缩短到
于是做完了。
12|0CF1394C
完全不是字符串的字符串题/cf。
注意到相似的定义本质上是字符串中
那么此时进一步考虑计算答案。看到最小化最大值想到套路二分。考虑每个二元组对答案的限制是什么。假设当前二分到一个答案
最后的问题是构造方案。根据上面的我们得出了一个区间,那么任取在区间中的两点即可,可能要同时注意一下第三维对答案的限制。
13|0CF321D
考虑设一个
此时
14|0CF1427F
首先不考虑轮流的问题。我们将第一个人摸到的牌记为白色,剩下的记为黑色。我们考虑求出一组合法的顺序使得牌堆能被取空。我们试图维护一个栈结构,维护若干个大小不超过三的元组。顺序扫描序列,每次取出栈顶,如果当前卡牌颜色和栈顶维护的元组相同,我们将其加入栈顶的元组,否则我们新开一段。然后若栈顶元组大小为三就将其加入答案序列的末尾并将栈顶出栈。由于保证有解,所以栈一定被删空,那么答案序列按顺序输出即为一组合法方案。
接下来考虑怎么轮流。注意到元组之间是有一些限制关系的,形如第
那么我们可以考虑一种剥叶子的构造方式。每次选出一个颜色要求和当前相同且为叶子的元组,将其添加到答案序列中,然后将其删掉。
但现在存在一个问题,即我们如何保证每一步都存在一个这样的叶子供我们删除。我们首先来观察森林中的树的一些性质。注意到栈每相邻两层之间是异色的,所以树的任意相邻两层之间也是异色的。然后我们回到原命题,分此时是要取白色还是黑色的讨论。
对于白色的情况,我们有白色和黑色的节点数量相同。若此时不能取到任何一个叶子,则这个森林必定为由一些黑白交错的链的组成,且所有链白色节点为根。但原题保证有解,所以至少有一个链底为黑色。故不会由这种情况,我们任取一个点即可。
对于黑色的情况,此时黑色节点的数量比白色的数量多
__EOF__

本文链接:https://www.cnblogs.com/-Complex-/p/17555350.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话