CF1203(Div. 3) 题解(全部)
1|0A Circle of Students 题解
1|1题目大意
\(n\) 个人站成一圈,求是否是按照 \(1\) 到 \(n\) 的顺序站的,顺时针或者逆时针皆可。
1|2解题思路
将每个学生所在的位置标记一下,对于编号为 \(i\) 和 \(i+1\) 的学生,如果他们俩在环上相邻,则其中一个人的位置一定等于另一个人的位置模 \(n\) 加 \(1\)。
1|3代码
2|0B Equal Rectangles 题解
2|1题目大意
给定 \(4\times n\) 个数,求是否可以拼出 \(n\) 个面积相等的长方形。
2|2解题思路
首先需要满足每个元素的出现次数为偶数,其次排完序后若 \(a_i\times a_{n\times 4-i+1}\neq a_j\times a_{n\times 4-j+1}\),即两个矩形面积不相等,不满足条件。
2|3代码
3|0C Common Divisors 题解
3|1题目大意
给定一个长度为 \(n\) 的数列 \(\{a_i\}\),求 \(\sigma(\gcd\limits_{i\in[1,n]}\{a_i\})\)。
3|2解题思路
先算出所有元素的最大公因数,如果最大公因数 \(g\) 为 \(1\),即所有元素两两互质,则直接输出 \(1\);否则输出 \(g\) 的因数个数。
3|3代码
4|0D1 & D2 Remove the Substring 题解
4|1题目大意
给定一个字符串 \(s\) 和一个它的子序列 \(t\),要求删除 \(s\) 的一个子串(连续的一段字符串),使得 \(t\) 仍然是它的子序列,求最多删除多长的子串。
4|2解题思路
先找到 \(s\) 中最靠后的子序列 \(t\),得到这个子序列每个字符在 \(s\) 中的位置 \(p_i\),我们可以删除 \(p_0\) 前面的所有字符,将 \(p_0\) 这个字符换成最靠前的字符,删除 \(p_1\) 和 \(p_0\) 中间的字符,再将 \(p_1\) 这个字符换成最靠前的字符,删除 \(p_2\) 和 \(p_1\) 中间的字符,可以用 upper_bound
来解决。
4|3代码
5|0E Boxers 题解
5|1题目大意
给定一个长度为 \(n\) 的数列 \(\{a_i\}\),对于每个 \(a_i\) 可以使得 \(a_i\gets a_i\pm1\)。
选出个数最多的方案,使得 \(a_i\neq a_j\ (i\neq j)\)。
5|2解题思路
先将 \(\{a_i\}\) 从小到大排序,每个 \(a_i\) 在操作后要尽量的小,可以理解为越小它后面的元素能改变的方案越多,操作完之后如果其值没标记过,则标记它并且个数加 \(1\)。
注意当 \(a_i=1\) 时不能 \(a_i\gets a_i-1\)。
5|3代码
6|0F1 Complete the Projects (easy version) 题解
6|1题目大意
有 \(n\) 个项目,做第 \(i\) 个项目需要能力值至少为 \(a_i\),做完后能力值会增加 \(b_i\)(可能为负),给定初始能力值,求是否能够做完所有的项目。
6|2解题思路
先将所有项目按 a[i].x
从小到大排序,然后将所有 a[i].y
\(\ge 0\) 的项目做完。得到新的 \(r\) 值。然后将所有 a[i].y
为负值的项目提取出来放到一个新的数组中,专门处理,假设有 \(m\) 个这样的项目用 \(b_m\) 保存,我们每次检查是否有项目可以最后完成即可。如果有第 \(i\) 个项目可以最后完成,就相当于我们的 \(r\) 值减去其它 \(m-1\) 个项目的 \(y\) 值后,依然有 \(r\ge\)a[i].x
且 \(r\ge\)abs(a[i].y)
。这样确定了最后完成的项目后,我们再找是否有项目可以倒数第 \(2\) 完成即可,以此类推。最后如果完成的项目数 \(\text{sum}=n\) 说明我们完成了所有项目。
6|3代码
7|0F2 Complete the Projects (hard version) 题解
7|1题目大意
有 \(n\) 个项目,做第 \(i\) 个项目需要能力值至少为 \(a_i\),做完后能力值会增加 \(b_i\)(可能为负),给定初始能力值,求最多能够做完多少个项目。
7|2解题思路
先将所有项目按 a[i].x
从小到大排序,然后将所有 a[i].y
\(\ge0\)的项目做完。得到新的 \(r\) 值。然后将所有 a[i].y
为负值的项目提取出来放到一个新的数组中,专门处理,假设有 \(m\) 个这样的项目用 \(b_m\) 保存。我们将这个新数组按 b[i].x+b[i].y
从小到大排序,可以发现按照这个顺序排序的项目,如果我们可以发现,先完成第 \(i\) 个项目,再完成第 \(i-1\) 个项目是没有影响的。(当然,完成第 \(i\) 个项目后,不一定能完成第 \(i-1\) 个项目)设 \(dp_{i,j}\) 表示在前 \(i\) 个项目中,总能力值为 \(j\) 的情况下,我们最大能完成的项目数。对于第 \(i\) 个项目,我们有两种选择,若不完成,则 \(dp_{i,j}=dp_{i-1,j}\);若完成,则 \(dp_{i,j}=\max(dp_{i,j},dp_{i-1,j-|b[i].y|})\)。由于完成的顺序肯定是先完成第 \(i\) 个项目,再完成 \(i-1\) 前面那些项目,所以我们在完成第 \(i\) 个项目时,会使得能力值减少。
7|3代码
__EOF__

本文链接:https://www.cnblogs.com/cyf1208/p/17742387.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)