2022 陕西 省赛
顺序按照我认为的难度排序
1|0J
1|1题目描述
有一个长度为 n 的数列 。有一个数 k,表示可以将 k 个 减 1,可以连续可以不连续。问你可以将所有的数都变成相同的数的 k 最大是多少。
1|2思路
的时候,相当于把一个数减去 1, 的时候,相当于将任意的数加上 1。所以除了所有的数都相等的情况答案为 之外,其他所有的情况都是 。
1|3code
2|0B
2|1题目描述
一个翻牌游戏。
给出两个长度为 的数列,分别叫做 表示卡牌两面的数字大小。给出一个 k 表示可以将任意的 变成 的次数。变成 之后就不能再变回 。
有 次询问,每次询问都会给出 m 个不可以翻转的卡牌,对于每次询问给出最大的牌上的数字之和。
2|2思路
对于所有的卡牌,求出 表示为 ,并让卡牌按照 由大到小排序。然后求出初始的翻 k 张牌的价值和。对于每次询问,会给出 m 张不可以翻的卡牌,让卡牌按照 ch 拍完序,然后从前往后枚举,如果这张牌在不可以翻的 k 张牌之内,就手动移除,更新一下价值。
2|3code
3|0G
3|1题目描述
给出一个 n,m。表示石头数量和水的数量。在二维平面中用石头组成一个上方开口的容器。问你 n 个石头可以围出最多多少个水,m个水需要最少多少个石头围出。
3|2思路
纯纯画图猜结论题。
赛场上队友怕爆 unsigned long long 然后就开始用 python 写,结果因为 python 不熟练,出现了很多奇奇怪怪的问题,然后又换成 C++ 结果不会爆,这下纯纯小糖人了。
3|3code
4|0C
4|1题目描述
给出 n 个字符串和一个价值 k。要打出者所有的字符串。在打每个字符串的时候有两种选择。
1、手动把所有的字符串都敲出来,每敲一个字的价值是 1,这样的价值就是 。
2、将之前所有的打过的字符串选择一个复制一下粘贴过来(有且仅能复制一次),这下的操作价值是 k 。然后对复制过来的字符串进行删减一个字符的价值是 1, 在任意的地方添加的价值也是 1 。
所有的字符串可以按照不同的顺序进行敲打。
问你将所有的字符串都打出来的最小价值是多少。
4|2思路
一个很浅显的道理是,可以先两两求出所有的字符串 之间的 那么如果已经打出了 那么用第二种选择的价值就是 。
可以抽象的来想一下。
对于所有的字符串抽象成点,然后建立一个虚点,虚点和其他点连边的边权设置为各个字符串的长度,然后字符串与字符串之间的连边设置为上述价值。
然后对所有的点跑最小生成树就可以得到最小的价值。
4|3code
5|0D
5|1题目描述
多组询问。
每组给出一个 s。S是T的前缀,并且S与T的hash值相同。
问你T能是多少。
5|2思路
暴力枚举所有长度 的串以后会发现可以构造出所有不同的 hash 值,于是直接把原串向左移动 6 位, 给前面拼 个字母使得 hash 值不变即可。
直接暴力的话复杂度是不对的(主要是这个模数速度挺慢的),可以考虑考虑这样一个事实:既然这 6 位 的哈希值 X 是多少已知,我们直接枚举它是几倍的 mod+X,然后把他还原回原串,如果每一位都在 区间 [1-26]之间,就是一组合法解。这样的解非常密集,枚举一次的成功率大约是 (26/29)^6 = 51%, 所以只需要枚举几个数就能得到解。
5|3code
6|0H
6|1题目描述
给你一个长度为 的数列 。让你将这个数列划分成两个部分,我们称之为 和 。
令 的长度为 , 的长度为 。然后让所有 suf 中的数对 pre 中的数取模数,如果所有的数都相同,那么就可以这样划分。
问你 A 的最大值是多少。
6|2思路
首先对数列 进行排序。可以发现:
1.假设所有兔子的最小值为: ,将所有不为 的兔子全部变为绿色。因为小的值对大的值求余,结果一定是小的值。所以所有 对大于 的值求余,结果都是 、满足题意。即假设最小值出现次数为 ,则答案为 。
2.若最大值为 ,且 对所有非 的数字求余结果相同。那么可以将所有非 的兔子涂成绿色。例如 2 2 2 3 4 13 13,可以将 2 2 2 3 4 全部涂绿,两个 13 对所有其他数字求余得到的结果都是 1 .即假设最大值的出现次数为 ,则答案为 。
3.若最大值对其它数字求余结果均为 0 ,答案为 n-1 。例如 2 2 3 3 6 6 12 12。可以只剩个 12 为白兔子,其它的兔子全部涂成绿色.
4.先将所有数字排序,以某一数字 为分割点,所有小于等于 的兔子涂绿,其余兔子保持白色.这种情况最难判断,首先我们需要证明除此之外没有其它情况(即一定是以某一个数字作为分割点,白色兔子和绿色兔子分为两堆)
然后求前缀的 ,其中 表示钱 i 个数字的最小公倍数,然后再求后缀差值的 , 表示 这些数字差值的 。
然后枚举 ,若 则说明前 只兔子涂色是一种可行的方案。
6|3code
7|0F
7|1题目描述
一个人要打 CF ,现在给出所有比赛的开始时间和这个人要打当前这场的 rating 加减情况,分别用 和 表示开始时间和 rating 改变。每打一场比赛需要 k 的时间缓缓,这段时间内不能打任何比赛,如果打了第 i 场比赛,可以在 的时候打下一场。
这个人打比赛的方式是,在一个时刻如果没有在休息,如果有比赛打,那就会立即打这场比赛,也可以在当前这个时刻决定放弃,那么剩下的比赛就一场也不打。
这个人至多可以打 m 场,也可以不打满 m 场。
可以选择任意时刻开始打比赛,问你上述条件下,打比赛的最大价值是多少。
7|2思路
比较裸地倍增维护。
维护三个数组 。
表示从第 i 个位置钦定他打 场比赛之后紧接着可以打的比赛是哪一场。
表示从第 i 个位置开始钦定他打 场比赛的价值是多少。
表示从第 i 个位置开始最多打满 场比赛的最大价值是多少。
一开始算 的时候可以枚举每个位置,然后二分查找第一个大于等于 的位置是哪里,也可以 lower_bound 求。
可以得到如下的状态转移。
然后枚举每个位置,求每个位置至多打 m 场比赛的最大价值。
求位置的最大价值的时候,可以倍增求解,注意每次加入一个区间的时候,在第 x 个位置处的答案:
其中 sum 求的是从 x 枚举到此处的 之和,好像还不太好解释,具体看代码。
7|3code
__EOF__

本文链接:https://www.cnblogs.com/zzz-hhh/p/18139524.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具