VP 记录

一些拉跨的 VP 记录。

一些标记:

  • 表示赛时做出来的题;
  • 表示赛时有想法但是没通过的题;
  • Δ 表示已补的题
  • 表示赛时完全没有思路/没有时间看的题。

ARC 113#

A:给你一个 K,求有多少三元组 (A,B,C) 使得 ABCK

直接枚举是对的。

B:给你 A,B,C,求 ABC 的个位数。

首先可以把 A10,但是你发现这个 10 它不是质数,也不一定互质什么的。哦但是这样我们只要知道指数的模数是多少就可以了。然后 A 不超过 9,打表求循环节:
0:1|1:1|2:2486|3:3971|4:46|5:5|6:6|7:7931|8:8426|9:91
记得判断指数结果为 0 的情况。

C:给你一个字符串,求最多操作多少次。一次操作能把相邻三个字符,如果前两个相同而与第三个不同,则把第三个改成与前两个相同。

直接从后往前做,就是如果扫到连续多个字符相同,那就算出它的贡献,再记录上一次是什么字符,否则无法覆盖之前的。还要记录中间不同的那一段扫过来每个字符出现的次数。

D:给你一个 N,M 以及 K。然后在一张 N×M 的网格图里填上 [1,K] 内的数字,令 Ai 为第 i 行的最小值,Bj 为第 j 列的最大值。现在要求有多少不同的 (A,B)

就是 A 的最大值一定要小于等于 B 的最小值。否则,A 中的最大值一定会出现在 B 中,就不合法了。除此以外,我们一定能够构造方案。注意特判一行或者一列的情况。
然后就是,你只要做这样一个问题:给定值域 K,求有多少序列对 (A,B),满足 A 的最大值小于等于 B 的最小值。挺经典的计数问题。我们令 ai 表示长度为 N 的序列值域为 i 的序列总数(i 必选),这个东西可以直接差分得到,就是你减去 ai1 就行了。

E:T 组数据,每组给你一个由 ab 构成的字符串,要求操作若干次后得到的字符串字典序最大。每次操作可以选择两个相同的字符,然后把中间的字符翻转,然后删去这两个字符。

F:给你一个 X0n,现在你在实数轴上有 n 个人,第 i 个人的位置在 Xi1Xi 间随机。

ARC125#

A:给你一个序列 a,一次操作可以使它前后循环移动,或者将第一个元素放入 b 的末尾,求最少多少次可以使得 b=T

由于串只由 01 构成,所以如果 T 由 01 构成,那么贪心地想肯定是先移动到一个 01 相邻的位置,然后不停地反复横跳。在此之前 01 也可以放入 b 的末尾。此前注意很多很多特判全 0 或者全 1。

B:给你一个 N,求有多少个数对 (x,y) 满足 x2y 是平方数。要求 1x,yN

首先假设这个平方数是 a2,那么通过移项可以得到:(xa)(x+a)=y。那么我们令 u=xa,v=x+a,就会得到如下限制:

{uv1uvN2u+v2Nuv(mod2)

依照这些限制,枚举的 u 只需要到 N 就行了,然后对于一个 u,可以直接算出合法的 v 的取值个数。

ΔC:给你一个序列 A,求 N 的所有排列中,以 A 为最长上升子序列的字典序最小的那个。

采用归纳法。首先考虑边界:如果 K=1,则唯一的方案就是倒序排列。

然后对于 A1 进行分类:

  1. A1=1,那么我们在构造的时候 P1=1 必然成立。这很显然。那么问题就缩小规模到 K1 长度的 A={A21,A31,,AK1},求它的答案,然后每一项再加回 1 就是最终的结果。
  2. A1>1,那么再构造的时候 P1=A1 必然成立。此时,必然有 P2=1,因为这样构造一定有解并且字典序最小。我们接下来考虑这个解。这样一来,相当于在后面问题缩小到 K1 长度的 P{2,3,,A11,A1+1,,N} 的排列,并且要满足 A2,A3,,AK 是它的 LIS。

直接递归求解即可。

posted @   ZCETHAN  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
主题色彩