Codeforces Round 969 (Div. 1 + 2)
A
将序列转化为 串,奇数为 ,偶数为 。
容易发现两个 不能分在同一组,于是答案的上限取决于奇数的个数,并且容易构造方案达到这个上界,随便做做就行。
B
将序列排序后,发现不管怎么加,大小顺序不变,记录下最大值按题意模拟。
C
根据基本数论知识可得,操作等价于加上 ,所以在 意义下数不变,记录一下所有数枚举断点。
D
容易发现产生贡献只能是根节点和叶子结点的值不一样。
将问题转化为一堆叶子未确定和一堆叶子已确定。
当根节点是确定的,而且先手先填,所以如果有 个问号,那么先手可以多拿 个贡献。
否则,就要开始分讨,我们先要证明一个引理,就是先手和后手他们填的数不可能相同。证明也很简单,他们可以进行反悔,如果给对手多了一个贡献,那么他可以回之前操作取消。
因此,如果叶子里面 和 个数不同时,先手会优先把根节点选好,然后对于问号,只能拿 贡献。
相同时就大家都不选根节点,选完其它叶子结点再选根节点最优。
E
容易发现一条链只有所有边都被确定时才达不到上界。由于点是 序,有查询相邻节点,所以一条边只会经过两次,暴力维护即可,思维难度不如 D。
F
赛时止步于此。
究极神秘结论题。
题意:定义一个正整数集合是合法的:你可以任意次取出集合中的正整数 ,满足 同奇偶性,且不在集合中,然后把它加入集合。做到无法再做为止,最终集合内的数必须连续。给定序列,求有多少个子区间内的数组成的集合是合法的。
考虑将原序列变为很多段差分。差分可以将问题统一化。
先考虑只有两个数,差分为 ,明显, 只能有 的因数。
考虑一大堆数差分结束条件,将所有的 因子去除后,就是所有的差分都相同才能结束。
我们可以猜最后这个数是什么。首先猜个下界:,幸运的是,我们总能构造出一种方案使其满足。
所以问题就很简单了,就是查询有多少段 ,满足 。
Div 1 D
中文题解有没有树脂。错了也不改一改,硬控我很久。
考虑不进行 操作,将原序列从小到大排序后,最优的排列一定是:
交换即可证明。
考虑 这种条件很难维护,我们将其拍扁到值域上。
接下来就是官方中文题解式子的错误,令 表示一段数内值域在 间的数的个数,需要满足:
贪心的,把非法的序列变合法,一次 操作相当于减少两个最大值,随便维护,注意若 为奇数,中间一项不必管。
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)