2024 1/2 成七训练
道路(road)
竞赛图三元环计数,答案为 。
扫描线维护出度就好了。
图(graph)
考虑最优解是一个森林。
我们想到转到网络流维护。
尝试将图上点随机染色,白点连 ,黑点连 ,之间的边互连,这样网络流就能找到最优解。
正确率为 。
拼图(jigsaw)
考虑对于每个点对 算出有多少对 途径了这个状态。
考虑倒退,从 到 和 。
这东西类似 S-B-T,可以生成所有的 且 。
后面就是推式子了。
钥匙(key)
等价于找半平面集,使得交全为给出的点。
找出凸包。
根据皮克定理判断即可。
排列蛤蟆(hammer)
操作不影响逆序对个数。
猜测逆序对相同且 相对位置相同的对可以两两转换。
推性质:若存在 ,若 ,则可转化成 ;否则有 。
性质:存在 次操作,使得操作后 和 在序列最右。
证明:
首先有 的相对顺序不变。
假设 在 左,对于 考虑,当其转向时,发现 下降,则 次操作后, 相邻,然后通过 将 交换到右侧。
再是 在 右,对于 ,当其转向时, 上升,则 次操作后, 相邻,然后通过 将 交换到右侧。
证毕。
我们考虑将 交换成等价类中的一个序列上,类似于双向搜索。
考虑对 都按照一种顺序,要么同时将最小值换到最后,要么同时将最大值换到最后。
考虑将最小/最大同时换到最后,然后划分成 的子问题。
若 中 的相对顺序不同,那么由 有解可以推出 或 中 的顺序可以交换(后面详细证。
假设当前是 在 左,要交换( 在 右同理)。
先将 换到最右。
再将 换到次右(若 在 左,则递归计算子问题,即交换 的顺序)。
此时假设有 。
若 ,可操作;
若 ,可操作;
若 ,考虑利用前面的数得到 :
- ,可操作;
- ,可操作;
- ,递归处理
发现若无法交换,则这整个子序列是完全逆序的, 就无解。
这样就做完了。
AT_joisc2017_d 切符の手配 (Arranging Tickets)
有点省选的味道了。
考虑先定向 。
再考虑翻转,当两个区间无交时,不能同时翻转。
则所有翻转区间交不为空,设为 。
考虑二分答案 。
考虑枚举 , 为翻转后的计数, 表示含 的翻转区间数。
则有 ,根据 ,有 。
考虑贪心从前往后 满足条件,显然为了让 满足条件,选择的区间右端点应尽量大。
于是从 向右做扫描线,每次加入 的可选端点,贪心选择可选区间中右端点最大的区间,取到下界即可,最后在判断 是否合法,时间复杂度 。
性质:在最优解中,设 为 的下标,有 或 。
证明:若 。
- 若存在翻转区间 ,则再翻转 , 加一, 减一,这种情况不可能是最优解,舍。
- 否则分别存在以 为左端点和以 为右端点的不同区间,都翻转, 加 , 要么变成 ,要么不增,不断调整,若最后有 ,由于不存在区间 ,所以 ,继续删除,得到 。
那么现在 的枚举量是 的。
性质:对于 ,同时有 。
证明:设 ,且 ,又由上有 ,则 ,与假设矛盾。
那么现在 的值域是 。
性质:最优解包含所有的 的最大值的位置。
证明:设 分别表示 的最大值的最左和最右位置,假设有 ,则若存在将要翻转区间不包含 ,若翻转了就会变劣, 同理。
于是 的枚举位置是 的。
时间复杂度 。
矩阵(matrix)
这不是gdkoi?
首先这东西有循环节,然后一个点被操作 后只会产生一个十字(五个点)的影响。
找出循环节,倍增加速即可。
修公路(road)
相交的弦连边,每个连通块构造菊花图(很妙,。
可以线段树优化建图。
序列(sequence)
类似维护最大子段和搞一搞就好了,不写。
重振旗鼓(cheer)
显然有确定链端点时的 的做法。
考虑一叶子,先做一遍以它为端点的情况,此时他不再是端点,维护一个 ,表示已删叶子的 ,将这个叶子删除,然后 。
考虑优化,发现,当 时, 直接删就行了,不需要做算法。
于是执行算法的次数是 的,于是总时间复杂度 。
惊鸿照影(memory)
二分答案,相当于求圆内交点个数,映射到圆上,就是个二位偏序问题。
明月来归(return)
离线,显然 。
在线,随便维护。
女巫(witch)
好题。
赛时没想清楚关于求和在取第 位的问题。
拆位,权值相当于前缀异或后 的个数乘上 的个数。
考虑维护虚树,显然,只会在每个子树内取一个点。
设 表示以 为根的虚树个数, 表示以 为根的所有虚树从根往下一层异或和为 的方案数, 表示答案。
考虑 的儿子 的合并,其中 表示 第 位的值。
第 位为 的 在两端区间内。
考虑加速,线段树合并即可。
生成树(tree)
求边集 的 MST,可以将 分成若干子集,分别求 MST 得出边,再用这些边求 MST。
考虑点分治优化这个过程,容易发现,每个分治中心将将子树划分为若干个连通块,这一层分治中需要考虑的就是合并这些连通块;发现这个过程类似 boruvka,所以直接用 boruvka 求出合并这些连通块可能用到的边,然后在外层将这些可能用到的边进行一次 kruskal 即可做到 。
在一个分治中心,从根开始维护前缀和 ,则要求使 最小的 。
将 放在一起排序,答案就是不同子树的前驱后继。
子树太多不好做。
考虑上边分治,就做完了。
字符串(string)
循环同构经典问题不讲。
找规律,只需要求 , 内部的答案以及 ,, 跨过中间的答案。
系数可以矩乘维护。
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18120964
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话