CF1280、1281题解
CF1280、1281题解
CF1281A
题意
给定 个字符串,对于每个字符串:
- 若它以
po
结尾,输出FILIPINO
- 若它以
desu
或masu
结尾,输出JAPANESE
- 若它以
mnida
结尾,输出KOREAN
保证所给的字符串一定满足以上的三种情况之一。
分析
if 判断一下字符串的后几位即可。
CF1281B
题意
给定 对字符串,对于每对字符串 和 ,你至多可以交换 中的一对字符,使得 严格小于 。若无解,输出 ---
。
分析
暴力枚举 中的两位,交换后看是不是严格小于 。
CF1280A
题意
一个字符串 下标从 到 ,和一个变量 ,初始为 。要他执行 次操作,求最后的串长度对 取模的结果。
操作如下:
-
将 。
-
将剪贴板的内容替换为 是当前的串的长度 ,并在原串中删除 。
-
在串的末尾把剪贴板内容粘贴 次。
保证。
分析
容易发现每次操作都是在原串的后面加上一些东西。只有字符串的前 位的具体字符关系到操作,因此只需处理出前 位,字符串的长度可以通过递推得到,即 。
CF1280B
题意
有一个 的字符矩阵,每个字符为 A
或 P
。
每次可以选择一行或一列中若干个连续的字符,并将其向另一个方向复制若干列或行,如样例所示。
需要将矩阵的所有字符全部变为 A
,输出最小的操作次数。如果无论如何都不能完成,输出 MORTAL
。
分析
容易看出,原矩阵只有 种情况,分类讨论即可。
-
若字符矩阵全是
P
,则无解; -
若字符矩阵本来就全是
A
,则需要 步操作; -
若原矩阵的第一行或第一列或最后一行或最后一列是
A
,则只需 步操作,即推整行或整列; -
若原矩阵有整行或整列的
A
,且不是在边界的行或列,则需要 步操作,即向两个方向推该行或列; -
若没有整行整列的
A
,但有在四个角的A
,则需要 步操作,即先推完整行,再用行推完整个矩阵; -
若没有整行整列的
A
,也没有四个角的A
,但有在边界的A
,则需要 步操作,即先向两个方向推完整个行或列,再推完整个矩阵。 -
若只有普通的
A
,也就是没有在以上 2-6 情况中的任意一种,则需要 步操作,即向四个方向推。
CF1280C
题意
给一棵有边权树,树上有 个点。
定义 为任意选 组无重复的点(每组点两个点),每组点的距离和的最小值, 任意选k组无重复的点(每组点两个点),每组点的距离和的最大值。求 。
分析
首先考虑最大值。
每次新增加一条边 ,当它左边的所有点都尽可能地和右边所有点配对时,比原来多了 次加上 的权值,此时增加的贡献最大,为 ,其中 表示子树大小。因此对于整棵树来说,要取到距离和的最大值,就要尽可能地让每一条边左右的点配对,最后答案为每条边的贡献之和。
有了最大值的思想,求最小值就很容易想出来了。
对于一条新边 来说,要想使其贡献尽可能小,就尽可能地让两侧的点尽量与同侧的配对。如果 为偶数,那么可以完全内部配对,此时 的贡献为 ;当 为奇数时, 侧至少有一个点需要与 配对,那么此时 的贡献为 。最后答案为每条边贡献之和。
CF1280D
题意
给一棵有边权树,树上有 个点。
定义 为任意选 组无重复的点(每组点两个点),每组点的距离和的最小值, 任意选k组无重复的点(每组点两个点),每组点的距离和的最大值。求 。
分析
首先考虑最大值。
每次新增加一条边 ,当它左边的所有点都尽可能地和右边所有点配对时,比原来多了 次加上 的权值,此时增加的贡献最大,为 ,其中 表示子树大小。因此对于整棵树来说,要取到距离和的最大值,就要尽可能地让每一条边左右的点配对,最后答案为每条边的贡献之和。
有了最大值的思想,求最小值就很容易想出来了。
对于一条新边 来说,要想使其贡献尽可能小,就尽可能地让两侧的点尽量与同侧的配对。如果 为偶数,那么可以完全内部配对,此时 的贡献为 ;当 为奇数时, 侧至少有一个点需要与 配对,那么此时 的贡献为 。最后答案为每条边贡献之和。
本文作者:l_x_y
本文链接:https://www.cnblogs.com/lxy-2022/p/CF1280_and_1281-solution.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步