VP 记录
一些拉跨的 VP 记录。
一些标记:
- 表示赛时做出来的题;
- 表示赛时有想法但是没通过的题;
- 表示已补的题
- 表示赛时完全没有思路/没有时间看的题。
ARC 113#
A:给你一个 ,求有多少三元组 使得 。
直接枚举是对的。
B:给你 ,求 的个位数。
首先可以把 模 ,但是你发现这个 它不是质数,也不一定互质什么的。哦但是这样我们只要知道指数的模数是多少就可以了。然后 不超过 ,打表求循环节:
0:1|1:1|2:2486|3:3971|4:46|5:5|6:6|7:7931|8:8426|9:91
记得判断指数结果为 的情况。
C:给你一个字符串,求最多操作多少次。一次操作能把相邻三个字符,如果前两个相同而与第三个不同,则把第三个改成与前两个相同。
直接从后往前做,就是如果扫到连续多个字符相同,那就算出它的贡献,再记录上一次是什么字符,否则无法覆盖之前的。还要记录中间不同的那一段扫过来每个字符出现的次数。
D:给你一个 以及 。然后在一张 的网格图里填上 内的数字,令 为第 行的最小值, 为第 列的最大值。现在要求有多少不同的 。
就是 的最大值一定要小于等于 的最小值。否则, 中的最大值一定会出现在 中,就不合法了。除此以外,我们一定能够构造方案。注意特判一行或者一列的情况。
然后就是,你只要做这样一个问题:给定值域 ,求有多少序列对 ,满足 的最大值小于等于 的最小值。挺经典的计数问题。我们令 表示长度为 的序列值域为 的序列总数( 必选),这个东西可以直接差分得到,就是你减去 就行了。
E: 组数据,每组给你一个由
a
和b
构成的字符串,要求操作若干次后得到的字符串字典序最大。每次操作可以选择两个相同的字符,然后把中间的字符翻转,然后删去这两个字符。
F:给你一个 ,现在你在实数轴上有 个人,第 个人的位置在 间随机。
ARC125#
A:给你一个序列 ,一次操作可以使它前后循环移动,或者将第一个元素放入 的末尾,求最少多少次可以使得 。
由于串只由 01 构成,所以如果 由 01 构成,那么贪心地想肯定是先移动到一个 01 相邻的位置,然后不停地反复横跳。在此之前 01 也可以放入 的末尾。此前注意很多很多特判全 0 或者全 1。
B:给你一个 ,求有多少个数对 满足 是平方数。要求 。
首先假设这个平方数是 ,那么通过移项可以得到:。那么我们令 ,就会得到如下限制:
依照这些限制,枚举的 只需要到 就行了,然后对于一个 ,可以直接算出合法的 的取值个数。
C:给你一个序列 ,求 的所有排列中,以 为最长上升子序列的字典序最小的那个。
采用归纳法。首先考虑边界:如果 ,则唯一的方案就是倒序排列。
然后对于 进行分类:
- 若 ,那么我们在构造的时候 必然成立。这很显然。那么问题就缩小规模到 长度的 ,求它的答案,然后每一项再加回 就是最终的结果。
- 若 ,那么再构造的时候 必然成立。此时,必然有 ,因为这样构造一定有解并且字典序最小。我们接下来考虑这个解。这样一来,相当于在后面问题缩小到 长度的 是 的排列,并且要满足 是它的 LIS。
直接递归求解即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?