二月 CF 的解题报告
就写我打了的。
并不是官方题解的翻译,是我做的方法。
部分题目没写好。
Codeforces Round #699 (Div. 2)
A. Space Navigation
判断起点到终点的方向,保留有需要的方向再判断。
B. New Colony
暴力。如果有一个进入垃圾桶,后面的肯定都进入垃圾桶。
C. Fence Painting
除了最后一个工匠以外,前面的工匠的作品都可以选择被覆盖掉。找到所有需要变化的颜色,模拟即可。
D. AB Graph
E. Sorting Books
先留着。
Codeforces Round #700 (Div. 1)
A. Searching Local Minimum
考虑三分每次可以把序列长度 。注意边界的特判,容易 FST。
B1. Painting the Array I
过是过了,但是我的方法似乎很垃圾,所以先留着。
B2. Painting the Array II
先留着。
Codeforces Round #701 (Div. 2)
A. Add and Divide
肯定先加后除。 就加到 。枚举 的值就可以了,注意到 不应该很大。
B. Replace and Keep Sorted
先暴力写出式子,发现很多项可以消去。最后式子中只剩下首项末项。
C. Floor and Mod
注意到只要满足 且 即可。对于一个 找到能对应多少个 。列出式子发现式子中带有一个 ,分类讨论 的取值条件。发现前半部分可以直接计算,后半部分整除分块。
D. Multiples and Power Differences
黑白染色后,黑格子 ,白格子 。
E. Move and Swap
题目都没看。
Educational Codeforces Round 104 (Rated for Div. 2)
A. Arena
除了最垃圾的其他都可以。
B. Cat Cycle
???为什么我的做法这么麻烦?做了 40 min 大草。
C. Minimum Ties
奇偶分类讨论。发现偶数可以做到不平局,每个人赢一半输一半。奇数的话每个人平一局,剩下的一半赢一半输。证明不会。
考虑构造,平局的话 和 平, 和 平,其他类似,这样构造就好了。输赢的构造可以分奇偶。
D. Pythagorean Triples
所以只要 和 的差为 的勾股数就能满足。然后可以二分或者直接算。
E. Cheap Dinner
做 次 DP。显然 次是互不干扰的。每次的时候就是扔掉有关系的,在剩下的里找最小值。然后考虑用一个数据结构维护就行了。我翻了很多人的记录,似乎就我是用线段树的。
F. Ones
我只知道贪心是错的。
G. String Counting
似乎是个字符串 DP。
Codeforces Round #702 (Div. 3)
A. Dense Array
在两个不满足条件的相邻的数之间插入若干个就好了。
B. Balanced Remainders
考虑每个数对 取模的值。分别找到 ,, 的个数,把大于平均数的转化。
C. Sum of Cubes
用 map 记录哪些数是三次方数。暴力枚举 ,求出 观察其是否是三次方数。
D. Permutation Transformation
递归模拟。
E. Accidental Victory
按照能力值排序,求前缀和。观察每个人能否打过他前面所有人加起来的和。从后往前找到第一个不满足这个条件的人,那么后面所有人都是可行的。最后不要忘记按 输出。
F. Equalize the Array
计算出每个数出现的次数。枚举最后的次数 ,把次数小于 的全部删掉,大于 的删掉使得他保留为 。似乎需要前缀和。
G. Old Floppy Drive
如果转一圈后加的值是个负数,那就只能转一圈不到。如果不行的话直接 。
如果转一圈后加的值是个正数,那一定是可行的。计算出要转几圈,然后可以二分一下。
Codeforces Round #703 (Div. 2)
A. Shifting Stacks
对于第 个位置,如果前面所有积木堆在一起能堆到 个就是可行的。
B. Eastern Exhibition
根据初一数学容易发现将 分开后,
应该取 的中位数。如果有两个中位数那么取在它们之间都可以。
C1. Guessing the Greatest (easy version)
考虑答案在区间 中,那么我们先查询 的次小值,再查 和 。哪个区间的次小值还是原区间的次小值,那么答案就在哪个区间内。容易发现大概是 次。
C2. Guessing the Greatest (hard version)
考虑优化 C1 的算法。我们考虑先取出这个序列的次小值位置 。考虑答案在区间 中,我们扔掉“先查询 的次小值”这个操作,利用 。如果 在此区间中,查询 或 使得这个查询区间包含 ;否则如果 在 左边,查询 即可,在 右边也同理。这样我们发现用一次操作就可以把区间缩小一半。
D. Max Median
二分答案 ,判断 的解是否可行。把大于等于 的数替换成 ,其他数替换成 。那么一段中位数至少是 转换为了这段的和是正的。所以查找新序列中有没有一个长度至少是 的子串满足和为正即可。这个问题可以使用前缀和,维护前缀和的前缀最小值,在线性时间内完成。所以总复杂度是 的。
E. Paired Payment
建图套路题。考虑以下建图方式:
- 对于一个点 以及一条连接 的边 ,建立虚点 。
- 对于一条边 ,我们建权值为 的边 。
- 对于一条边 和一个虚点 ,建立权值为 的边 。
怎么理解这个建图方式呢?我们考虑任意一条形如 的路径(我们把 叫做中转点) , 权值 。根据操作 2, 向 建立了权值为 的边。又根据操作 3, 向 建立了权值为 的边。这样就可以实现了。可以理解为中转点 本身是不经过的,经过的是建立在 上的虚点。其实也不难理解,个人感觉有点类似分层图最短路的思想。
接下来用 dijkstra 跑最短路即可。考虑这个建图方式的复杂度正确性:
- 操作 1 中虚点个数是 。
- 操作 2 中边个数是 。
- 操作 3 中边个数是 。因为如果某个顶点的度数为 ,我们将创建不超过 的边,并且所有 的总和为 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?