feecle 的 CF 简单题精选集题解

feecle 的题单 .

后文复杂度分析中默认 v 是值域 .

目录

CF1292B Aroma's Search (*1700)

可以注意到点肯定是越来越稀疏,所以实际上有用的点只有 log 个 .

然后随便整一个 poly 复杂度算法就可以了,时间复杂度 O(poly(logat)),可以通过 .

SubmissionO(loga2t) 做法).

CF1304C Air Conditioner (*1500)

依次加入每个旅客并动态调整目前温度可能的上下界,每次询问时取交即可 .

时间复杂度 Θ(n),可以通过 .

Submission .

CF1313D Happy New Year (*2500)

每个位置最多被 8 个区间覆盖,于是扫描线,动态维护当前的区间状压 DP 即可 .

时间复杂度 Θ(n2k),可以通过 .

Submission . 不滚动数组会超时 .

CF1322B Present (*2100)

按位考虑,那么就需要算有多少个 ai+aj 的第 k 位是 1,首先把所有数对 2k+1 取模,那么可以知道一个小于 2k+1 的数 xk 位为 1 当且仅当 x[2k,2k+11]x[2k+2k+1,2k+22] .

对于两个区间分别排序双指针计算即可,时间复杂度 O(nlognlogv),可以通过 .

Submission .

CF1322C Instant Noodles (*2300)

考虑两个右部点 i,j,它们邻接的左部点集合为 Si,Sj,则:

  • 如果 Si=Sj,那么可以把 i,j 合并起来,权值为 ci+cj .
  • 如果 SiSj=,那么贡献就是 gcd(ci,cj) .
  • 如果 SiSj,那么贡献就是 gcd(ci,cj,ci+cj),根据辗转相除法它就是 gcd(ci,cj) .

所以把能合并的都合起来然后求所有部分的 GCD 即可 .

如果可以 O(1) 判断集合相等,那么时间复杂度是 O(n+m) 的,可以通过 .

Submission .

CF1325D Ehab the Xorcist (*1700)

首先如果 u,v 奇偶性不同那么肯定无解,u=v 可以朴素特判 .

那么如果 vu 是偶数构造 vu2,vu2u,否则构造 vu2,vu2,u 即可 .

时间复杂度 Θ(1),可以通过 .

Submission .

CF1338B Edge Weight Assignment (*1800)

首先钦定一个叶子为根 .

对于最小个数尽量全填 1 的如果不行的话给每个不行的叶子的路径上放一个 2 和一个 3 就行了 .

对于最大个数对于每个边新开位都不相同最后再平衡异或和,对于一个点有多个邻接点是叶子的情况需要特殊处理 .

不难证明上述策略正确性,时间复杂度 Θ(n),可以通过 .

Submission .

CF1338C Perfect Triples (*2200)

找规律题,挂一个 gyh 的表 .

关于规律,每组的第一个数是 2k2k+11,其中 k 是偶数 .

每组的第二个数是对应的 2k+12k+1+2k1 范围内的数,假如值域分为四块 a,b,c,d,那么排列顺序为 a,c,d,b,递归下去处理即可 .

第三个数就是前两个的异或 .

那么直接递归处理就行了,时间复杂度单次 Θ(logn),可以通过 .

Submission .

CF1338D Nested Rubber Bands (*2700)

注意到当且仅当一些点是树上一个导出毛毛虫的独立集时它们组成的序列才是合法的 .

具体的就注意到对于一个序列上相邻三个点 x,y,z 来说,需要满足以下条件才能合法:

  • x,y,z 两两不交 .
  • 不存在一组顺次连接的环与 x,z 相交但是不与 y 相交 .

第一个条件相当于不能存在父子关系,也就是限制独立集,第二个限制仔细考虑一下就相当于 yx,z 的简单路径组成的毛毛虫上 .

那么问题变成给一棵树求最大的点集满足它是一个导出毛毛虫的独立集 .

这个可以简单树形 DP 解决,具体的,分成两条直链然后拼起来,对于每个直链用一个最大独立集状的 DP 描述:dpu,0/1 表示 u 作为链的一端且不选/选 u 的答案,转移略 .

时间复杂度 Θ(n),可以通过 .

Submission .

CF1349B Orac and Medians (*2000)

注意到如果序列中有两个连续的 k 那么很容易就能覆盖整个序列,而 k 和旁边的一个 k 的数操作即可得到两个连续的 k,对于一个序列,如果其中有大于半数个 k 的元素那么操作之后必然 k,根据抽屉原理只有两种情况:有一组相邻的 k 的元素、有一组中间隔着一个元素的 k 的元素 . 根据这种证明方法也容易得到别的情况一定是不行的,模拟即可 .

注意特判 n=1 和序列中没有 k 的平凡情况 . 时间复杂度单次 Θ(n),可以通过 .

Submission .

CF1355F Guess Divisors Count (*2600)

动机相对显然,直接描述算法流程:

考虑对 X 中较小的素数位都分解出来,动态维护目前的所有素数和次幂,按幂次降序第一关键字、素数大小升序为第二关键字排序,每次取出尽可能多的素数,然后查询,更新答案,重复操作 22 次,最后输出所得分解算出来的 d(X) 的二倍 .

如果前面素因子的幂次很大,那么答案很容易正确,否则,假设 850 以下的素数都得到分解了,那么剩下的情况:

  • 1,答案多乘了 2,没有问题 .
  • 素数,答案刚好 .
  • 素数乘素数,应该乘 34,但只乘了 2,没问题 .
  • 三个素数相乘,这样不可能有别的素因子了,所以答案至多为 8,我们输出的 2 是可以接受的 .

从而正确性得到说明 .

Submission .

CF1379C Choosing flowers (*2000)

每个物品拆成为 ai,bi 放在一起从大到小排序选,如果是 ai 直接选就完了,否则分为两种情况:

  • 对应 ai 在前面,那么后面都买这个是比较优的 .
  • 对应 ai 在后面,这时候这个位选不选都行,分别递归下去考虑即可 .

因为总状态数是 Θ(n) 的,所以没有问题 .

Submission .

CF1379F1 Chess Strikes Back (easy version) (*2700)

非常简单的题目,可以发现最终的结构肯定是由一个轮廓线分开,上面都是坐标为奇数的黑格,下面都是坐标为偶数的黑格 .

维护不是难点就不说了,我对于 easy version 写的 Θ((n+q)logq) 二分 .

Submission .

CF1385D a-Good String (*1500)

分治处理,但是递归层数受字符集限制,所以时间复杂度大概是 Θ(poly(|Σ|)n),不太想仔细分析 .

Submission .

CF1385F Removing Leaves (*2300)

?根据题意模拟即可,先剥父亲度数大的叶子 .

单次时间复杂度是 O(nlogn) .

Submission .

CF1396B Stoned Game (*1800)

假设第 i 堆石子最多,那么如果 ai>ijaj 那么 T 一直选 i 就必胜了 .

否则肯定所有石子最后被取完,这时判断石子数的奇偶性即可 .

单次 Θ(n) .

Submission .

CF1396C Monster Invaders (*2300)

可以发现换关的策略必然是往旁边走一步然后立刻走回来,对于最后一段需要特殊处理,如图:

那么令 dpi,h=0/1 表示打完了前 i 关,现在在 i,boss 的血量为 2h 的答案就可以了 . 转移就考虑对于每一关本身有三种策略:

  • 手枪点死所有小怪,然后 AWP 干掉 boss .
  • 手枪点死所有小怪,手枪点一下 boss,然后回来再点一下 .
  • 激光枪扫死所有小怪,然后回来再手枪点一下 boss .

时间复杂度 Θ(n) .

Submission .

CF1401E Divide Square (*2400)

记穿过整个正方形的线段数量为 c1,线段的交点数为 c2,则答案即为 c1+c2+1,因为每个交点可以对应一个面 .

所以只需要统计交点数,扫描线就可以了 .

时间复杂度为 O(n+m+vlogv) 其中 v=106 是值域 .

Submission .

CF1401F Reverse and Swap (*2400)

在线段树上看,对于每一层打 Swap 标记,Reverse 操作就相当于对 k 层及以下都 Swap 一次(类似文艺平衡树),最多只有 n 层直接打标记即可,别的操作是常规线段树操作 .

时间复杂度 Θ(n2n),可以通过 .

Submission .

CF1404C Fixed Point Removal (*2300)

相当于令 bi=iai(如果 bi<0 则忽略),每个 i 前面有 bi 个被标记了就可以标记,问最终标记的数的个数 .

扫描线,固定右端点动态维护以每个左端点 l 开始时最多能标记的点的个数 cl,考虑加入一个元素就是对于 {c} 的一次区间加,直接维护即可,需要线段树或树状数组二分找到分界点 .

时间复杂度 Θ((n+q)logn) .

Submission .

CF1406D Three Sequences (*2200)

考虑先令 b=a,c=0,动态调整到 b 不减,容易发现就是对于每个下降位置对后缀进行整体抬高,然后用 c 平衡 . 这样就构造出了一组合法的 b,c,通过全局平移即可得到 max{ai,bj} 最小的解 .

通过一些讨论可以得到答案就是 a1+i=2nmax{aiai1,0} .

从而只需要动态维护差分数组,对应区间加就变成单点修改,这是容易维护的 .

时间复杂度 Θ(n+q) .

Submission .

CF1406E Deleting Numbers (*2600)

考虑如果想知道一个数是不是 n 的因数肯定是先 B 后 A 查询 .

不过每次 B 后面都要一个 A 非常费,考虑优化 . 首先把素因子根号分治:

  • pn,先对 p 做一次 B 然后对 p 的每个幂次做 A .
  • p>n,考虑分块,每 B 次 B 做一次 A,如果在块内再进入考虑 .

因为最多只有一个 p 满足 p>n 所以这样可以卡进操作次数限制内 .

Submission .

CF1408D Searchlights (*2000)

枚举向右走的步数递推即可 . 时间复杂度 Θ(nm+v) .

Submission .

CF1408E Avoid Rainbow Cycles (*2400)

集合也看成点,如果集合 i 包含 j 则连边 i(m+j) 边权为 ai+bj .

那么相当于最少删多少条边使得图没有环,这是最大生成树问题 .

时间复杂度 O((n+m)log(n+m)) .

Submission .

CF1408F Two Different (*2300)

容易想到倍增地推平区间,这样只需要 Θ(n2n) 次操作就可以推平一个长为 2n 的序列了 .

对于整个序列,将其分为两个极大长为二的次幂的序列的并分别推平即可,因为只要求有不超过 2 个不同的数 .

Submission .

CF1408G Clusterization Counting (*2700)

在 Kruskal 重构树上看相当于每次取一个子树,做一个树上背包即可统计 .

时间复杂度 O(n2logn),瓶颈在排序 .

Submission .

CF1413C Perform Easily (*1900)

首先二分 . 将所有可能的差全部放进一个数组里面,排序之后双指针,如果有一个时刻区间里 1n 对应都齐全,那么这个方案就是合法的 .

然而仔细观察发现二分并没有必要,动态记录当前的答案调整双指针也可以 .

时间复杂度 O(nlogn),瓶颈在排序 .

Submission .

CF1415D XOR-gun (*2000)

首先按位考虑如果有一位出现三个及以上 1 的话肯定可以 1 次结束 .

否则因为最多只有 30 位,每位最多两个数,所以最多 60 个数,直接暴力算即可 .

注:暴力指枚举一个区间然后逐个操作 . Θ(n3) .

Submission .

CF1415E New Game Plus! (*2200)

k 次清零可以看成分成 k 组操作 . 注意到肯定是从大到小选最优,那么考虑从大到小加入每个 ai,考察每个 ai 分入哪组 .

如果第 i 组的和为 Si,当前 ai=x,那么如果将 i 分入 x 组将产生 Si 的贡献并让 SiSi+x .

通过反证法可以发现每次选 Si 最大的一定不劣,那么用堆动态维护即可 .

时间复杂度 O(nlogk) .

Submission .

CF1416B Make Them Equal (*2000)

注意到如果 a1 足够大那么就可以给后面的数赋任意值了 . 考虑对于每个 2i,每次先用 a1 微调使得 iai,然后把 ai 全给 a1,这样就可以了 .

容易证明过程中所有数都是非负的 .

Submission .

CF1428D Bouncing Boomerangs (*1900)

从后往前依次考虑:

  • ai=0,不理 .
  • ai=1,开一个新行 .
  • ai=2,和前面的一个 ai=1 匹配 .
  • ai=3,和前面的一个 ai=1,2,3 匹配(优先匹配 ai=2,3) .

时间复杂度 Θ(n) .

Submission .

CF1444C Team-Building (*2500)

先把组内有奇环的排掉 . 考虑算不组成二分图的组对数量,注意到不组成二分图至少要组间有边,所以只有 O(m) 对,用随便什么二分图判定方法判断即可 .

时间复杂度 Θ(n+m) .

Submission .

CF1446C Xor Tree (*2100)

那是代代相传的处事真言:“如果不能铲除更多不如意,不如去保留更多的幸福。”

首先显然最后形成一棵森林,故只需要判断连通性 . 在 0-1 Trie 上考虑,令子树 u 合法最大保留数的数量为 dpu​ 即可 .

时间复杂度 O(nlogv) .

Submission .

CF1458C Latin Square (*2700)

每个位置刻画为三元组 (i,j,ai,j),所有操作都可以描述为线性变换,直接做即可 .

时间复杂度 Θ(m+n2) .

Submission .

CF1491F Magnets (*2700)

依次查 i1i1 就可以找到第二块有磁性的磁石,然后用这块磁石二分即可找到第一块 . 接下来用这两块磁石依次判断后面的是否有磁性即可 .

交互 n1+log2n 次 .

Submission .

CF1491G Switch and Flip (*2800)

首先对于一个长为 n 的置换环,n+1 次交换归位是平凡的,不过超次数了 .

否则两两配对交换一次合并就变成有一对相邻反面硬币的置换环,按顺序依次交换即可归位 . 剩下的最多 1 个环可以用上面的策略完成 .

Submission .

CF1495E Qingshan and Daniel (*3200)

首先令出完牌的队是 A 另一个是 B,那么肯定能简单归约到出牌序列是 ABAB... 格式的东西 .

那么相当于对每个 A 找一个 B 匹配,感性理解发现此时顺序并不重要,所以直接扫就行了 .

时间复杂度 Θ(n+m) .

Submission .

CF1500C Matrix Sorting (*2600)

为啥从后往前贪是对的?

先把每行匹配上,那么从后往前看,如果一个操作加上之后和目标顺序一样就连操作到行的边否则连行到操作的边,最后拓扑排序即可 .

时间复杂度 Θ(n2logn),我是 map 所以多一个 log .

Submission . 别用 C++20 .

CF1534E Lost Array (*2300)

相当于 01 序列每次选 k 位翻转问最少翻几次全 1,注意到只有 1 的个数是关键的,对每种 1 的个数开一个点建图 BFS 即可 . 时间复杂度 Θ(nk) .

Submission .

CF1540B Tree Array (*2300)

首先枚举根,然后根据期望线性性枚举点对 (i,j)i<j 的概率,那么相当于从 LCA 每次扩展一个问先扩展到 i 的概率,注意到这里因为有线性性所以可以只看链上的内容,所以就是要对每个 (x,y) 算 LCA 一侧长为 x 另一侧长为 y 的概率,直接 DP 即可 .

我写的时间复杂度 Θ(n3logn),可以简单优化到 Θ(n3) .

Submission .

CF1542B Plus and Multiply (*1500)

显然就是判断 n 是否是 ax+yb 的形式,枚举 x 即可 .

时间复杂度单次 O(logn) . 需要特判 a=1 .

Submission .

CF1542C Strange Function (*1600)

十年之约 . 考虑算满足 f(x)=kx 的数量 c(k),显然要满足 1k1 都是 x 的因子,且 k 不是 x 的因子,那么朴素容斥即可得到:

c(k)=nlcm(1,2,,k1)nlcm(1,2,,k)

动态维护当前的 lcm(1,2,,k) 计算即可,注意到有贡献的 k=O(logn),那么时间复杂度为 O(logn),可以通过 .

Submission .

CF1548A Web of Lies (*1400)

注意到一个点被删,当且仅当这个点与某个编号更大的点连边,那么动态维护连了一个到编号更大的点的的边即可 .

时间复杂度 Θ(n+q) .

Submission .

CF1572B Xor of 3 (*2500)

首先全局异或和不等于 0 肯定无解 . 否则考察前缀异或和,一次操作就相当于 siai+2si+1si1 . 那么如果 n 是奇数则倒序操作所有奇数位然后正序操作所有偶数位即可 . 如果 n 是偶数只需要找到一个长为奇数的异或和为 0 的前缀然后对前后操作,可以证明如果找不到则无解 .

Submission .

CF1580B Mathematics Curriculum (*2200)

二分答案,然后考察 dpi,j 表示前 i 条线段的结尾点是否可能是 j,此处第一条放哪都行 .

那么直接做就是 Θ(n2lognw) 的了,可以看成 Θ(n2) .

Submission .

CF1582F2 Korney Korneevich and XOR (hard version) (*2400)

扫一遍动态维护 dpi,j 表示是否存在以 <i 的数结尾的异或和为 j 的子序列,那么每次更新的是一个后缀,可以均摊掉 . 对于有贡献的位置每一时刻一种 ai 最多 v 个,可以开个桶记录一下 .

所有地方都恰好均摊掉,O(n+v2) .

Submission .

CF1583F Defender of Childhood Dreams (*2500)

考虑 k=2 的时候就是每次对半分然后组内染同种颜色组间划分为子问题,k>2 每次分 k 份即可 .

那么就构造出了 logkn 种颜色的答案,可以归纳证得是下界 .

Submission .

CF1608D Dominoes (*2400)

想一下一种染色方案什么时候合法,首先要求黑白块数量相等 .

如果每个牌左右都不同色的话那么肯定是左边全黑右边全白或者对称局面 . 否则可以用 BBWW 隔开 BWWB,从而可以随便填,总能重排成功 .

组合计数部分是平凡的,依次讨论上述情况即可 .

Submission .


祝大家身体健康生活快乐!

posted @   yspm  阅读(263)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
😅​
点击右上角即可分享
微信分享提示