CF div2 994 (A~E)
VP赛时三题,自我感觉发挥不错,唯一不满意的地方在于D题完全没有思路。
A
答案最多为2,因为最坏情况即为先将整个区间合并为一个数,若这个数不是0,则再将这个数变为0。
所以3种情况分类讨论即可:
- 全是0,则不需要操作 ->
- 只有一段非
连续区间 -> - 不止
个非 连续区间 ->
B
首先,若只出现了一种字符,则一定可行,因为若只出现
否则,两种字符一定都有。考虑任意一对
设形成的前缀
易得前缀和后缀必然相互包含
所以检查是否有一对不相互包含的前后缀即可,实现不再赘述。
C
构造题
此题赛时的做法分讨得比较麻烦,但好在保证了正确性,还是官方题解的做法比较简洁。但感觉此题复盘的意义不大,故不再赘述。
D
若没有对每一行循环左移操作,则就是一个普通的走迷宫
由于每一行最多只会移动
状态表示:
考虑状态转移(此题重点):
由于每次只会向右或向下移动一格,所以
但由于引入了可对行循环左移的操作,使得这两种转移的方式并不一样:
1.
g[i][j][k] <- g[i][j-1][k] + a[i][j`]
其中
2.
g[i][j][k] <- f[i-1][j] + k * w + a[i][j`]
而
f[i][j] = min(g[i][j][0到m-1])
E
交互 + 二分,个人感觉非常不错的一道题。
首先要想明白一点:由于
假设这段区间中没有1,即为全
所以可以考虑:确定出来
具体地,可以确定出
同样,对含有
这样,就将区间分为了两半:一半全
此时又分为两种情况:
:直接对长度为 的全0区间二分,原理和上面说的一样。 : 由于全 区间长只有 ,故只用全 区间时只能对 的情况进行判断。那么 时怎么办呢?有个巧妙的办法:将另一半含1区间和该全0区间的子区间结合,这样构造的区间和一定为 ,并且区间长度范围是 。这样就转化为了和上述一模一样的做法,同样具有二段性,二分即可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验