Codeforces Round #773 (Div. 1) 题解

再一次白给……E 十分可做结果现场开都没开(其实是开了也没时间写完),D 写 2mnlogn 甚至跑不过 bitset 暴力。。。还好是小号,否则就要掉大分了 /dk/dk

A

直接模拟即可。碰到商为 x 的数对就将它们暴力配对。

B

一道很容易想复杂的题,现场卡了很久最后才发现是我想复杂了……

首先如果存在一种数出现次数为奇数那显然不行。考虑如何对于剩余的情况构造出一个合法的序列,我们找出第一个 i 使得 ai=a1,然后在 ai 后面插入两个 a2,在两个 a2 后面再插入两个 a3,两个 a3 后面插入两个 a4,以此类推。譬如 a 序列为 1,2,2,3,3,1,那么我们就进行一次操作将序列变为 1,2,2,3,3,1,2,2,3,3,3,3,2,2,然后将序列的前 10 分划分成一个符合要求的序列 1,2,2,3,31,2,3,3,1,这样我们再对后面的序列 3,3,2,2 构造即可,这样一来序列长度减少了 2,并且剩余的序列依然满足每种数出现次数为偶数,归纳构造即可,总操作次数就是 O(n2),刚好符合本题的限制。

C

首先对于一条形如 0 l r 的信息,我们可以确定 [l,r] 中的数都是 0,这个可以使用 set 维护区间删点。对于一条形如 1 l r 的信息,如果我们发现 [l,r]0 的个数恰好等于区间长度减 1,那么我们可以确定区间中那唯一不是 0 的元素是 1。那么对于剩余的元素呢?显然,我们没办法知道剩余元素的值,因此当我们询问这些位置时,答案一定是 N/A

这样我们就能够确定最终每个位置的状态(是 0 / 是 1 / 不确定),但是对于此题,我们还要动态地维护一个已知消息的集合并根据集合中的信息,判定每个位置的状态。这个其实也比较好办,只需要再记录一下我们知道每个位置的状态的时间戳 ti 就行了,对于最终状态为 0 的位置,我们就将其时间戳设为我们将其赋为 0 的时间,对于最终状态为 1 的位置 i,我们枚举所有包含 [l,r] 的区间,计算出 [l,r] 中所有 0 被确定的时间与该区间的信息获得的时间的 max,设其为 v,然后令 tivmin。这样每次询问只需检验确定的时间是否 当前询问的时间即可。

D

奇奇怪怪题目,n2mlogn(5×107) 跑不过 nn+n2mω(7×108)……我也是无语了(

做法有很多,这里讲一种我的做法。考虑如何判断一个数组的集合 S 内是否存在一个与 ai 不相交的集合。我们考虑 S 中的所有数组 ax,我们统计 cntT 表示 axS[Tax],也就是 S 中有多少个数组 ax,满足 Tax 的子序列,那么 c=TaicntT·(1)|T| 就是 S 中与 ai 不交的数组个数,这个可以用容斥的思想来说明,因为 i=0n(1)i=[n=0],所有与 ai 不交的数组恰好会对和式产生 1 的贡献,而所有与 ai 相交的数组不会对和式产生贡献。

这样一来思路就比较明显了:二分答案 mid,然后将所有数组按 wi 排序,check 过程中按 wi 降序枚举所有数组,这样所有与 wi 权值之和 mid 的数组是一段前缀,two pointers 维护这个前缀集合的信息即可。

现场写了个线段树二分……当然过不去(

E

一道非常普通的多项式题。

考虑设 pi 表示离 i 最近的关键点离 i 的期望距离,那么我们不妨先假设可以取空集,算出期望后乘个 2m2m1 即可。

考虑如何求 pi,我们设 sumi 表示前 i 个点中关键点的个数,ci 表示 i 是否为关键点,那么很明显我们要枚举离 i 最近的关键点是什么(如果有多个最近的关键点,我们不妨假设最左边的关键点离 i 最近),设其为 j,这样距离 i 小于 ij 距离的关键点都不能被选,特别地,如果 ji 右边,那么离 i 距离等于 ij 的、且在 i 左边的关键点也不能被选。这样我们可以列出式子:

pi=j=1i1cj·(12)sum2ij1sumj1·(ij)+j=i+1ncj·(12)sumjsum2ij1·(ji)

很明显可以想到拆为 左边带 i 项、左边带 j 项、右边带 i 项、右边带 j 项处理,以左边带 i 项为例,记 Ax=cx·2sumx1,Bx=12sumx1,再设 Cz=x+y=z,x<yAxBx,那么这一部分对 pi 的贡献就是 C2i·i。而求解 C 是经典问题,可以使用分治 NTT 解决。这样复杂度是 nlog2n

posted @   tzc_wk  阅读(168)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示