杂题选写 2
CF1423L Light switches
*2600
tag:暴力枚举,meet in middle
题目描述
有
接下来有
思路
每个开关至多会被按一次。
注意到
可以考虑一个
但复杂度显然不对。
所以 meet in middle,将开关划分为
每次询问枚举
具体实现时可以用 unordered_map 存下
时间复杂度
在
CF1942F Farmer John's Favorite Function
*2700
tag: 数据结构(线段树,分块)。
题目描述
给定一个长度为
有
思路
发现我们每次直接将
也就是说我们可以只计算每次开根向下取整后的值。
考虑将修改离线下来,跑一边扫描线,来维护到了第
现在我们只需要维护两种操作:区间加和全局开根。
这是一个经典的问题:用势能线段树来维护。
具体的,记录一个区间的最大值
CF1945H GCD is Greater
*2600
tag:数学,位运算,暴力枚举。
题目大意
给定
思路
多选数 gcd 不会变大,少选数按位与不会变小,所以
接下来让我们按位考虑
否则只会有
否则
CF749E Inversions After Shuffle
*2400
tag:概率期望
题目大意
给定一个
思路
去考虑每个可能的区间不太好做。让我们考虑可能的两对数
若
也就是说,若
可以通过树状数组来维护。
CF303C Minimum Modular
*2400
tag:暴力枚举,同余
题目描述
给定
思路
不妨来枚举
将两对整数
显然,若每次同余的对数大于了
否则,可能相同的数至多只有
枚举倍数根据调和级数时间复杂度为
CF1374F Cyclic Shifts Sorting
*2400
tag:构造,思维
题目描述
给定一个长度为
定义一次 swap 操作为选择一个整数
你需要使用至多
思路
一种不是正解的正确做法: 可以类似于选择排序,先从前往后排再从后往前排即可。
一个基本的想法是我们去做类似于选择排序的排序至少可以将前
那么若
也不一定。实际上只要数组中存在两个相同的数就一定有解。
为什么?让我们从逆序对的角度来考虑。若我们交换三个不同的数,那么逆序对的数量要么会改变
也就是说,我们可以通过交换两个相同的数来改变逆序对数量的奇偶性,从而构造出答案。
那么构造方案也就呼之欲出了:
-
若
,那么 swap 。 -
否则找到一个整数
满足 且 ,然后 swap 两次 ,之后再做一次最开始的排序。
「COI 2019」IZLET
tag: 构造。
题目大意
有一棵未知的有
构造出一棵满足条件的树。
思路
首先对于两个点
其次,若
此时我们发现,仅靠
把这棵树建出来,接下来考虑确定每个点的颜色。
可以枚举点
对于一个点
「COI 2019」TENIS
tag:思维,数据结构。
题目大意
思路
首先,所有排名为
其次,若可以打败能够获胜的人,那么也可以获胜。
我们可以模拟这个过程来在
若我们选了一个人,实际上是将他在三种场地上所有能赢他的人都能获胜,以此类推。
我们实际上是要找到一个最小的
维护每个人最后出现的位置
可以先将每个位置设为负的下标,然后找到第一个为
CF1930E 2..3...4.... Wonderful! Wonderful!
*2400
tag:组合计数
题目大意
现有一个长度为
给定一个
对于每一种
思路
一个多月没写过了,现在来补一点。
相当于我们需要删除一些位置,我们不在意过程,只关心最后得到的序列。
那么一个最终序列合法的充要条件就是:
- 被删除的位置的个数为
的倍数。 - 存在一个没被删除的位置其左侧或右侧存在
个被删除的位置 。
必要性显然,证一下充分性。如果
所以,考虑去枚举操作次数
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现