Educational Codeforces Round 153 VP 记

A Not a Substring

链接

题面翻译

题意(洛谷翻译):有 t 组数据,对于每一组数据,你需要判断能否构造一个只由左右括号组成且长度为已经给定字符串的 2 倍且已经给定的字符串不是子串的合法字符串。注:合法的字符串是左右括号能完全匹配的字符串。如果能,输出 YES ,并同时给出一个合法的答案,如果不能,则输出 NO

人类智慧题。

容易发现输出 NO 当且仅当 s= () ,考虑构造答案。

一种方法是对连续重复字符进行分类讨论,如果出现过连续两个相同括号,就令答案为 ()()()...(),如果没有出现过连续两个相同括号,就令答案为 (((...(())...)))

B Fancy Coins

链接

题面翻译

t 组数据:对于每组数据,你有 a11 元的普通硬币和 akk 元的普通硬币,同时你还有无限的花硬币(面值 1 元和 k 元均有),你需要用最少的花硬币组成恰为 m 元的面值,输出花硬币使用的最小值。

小丑贪心题。

贪心地尽可能多地放 k 元的硬币,最后不够再用 1 元的硬币补。

就没了。

C Game on Permutation

链接

题面翻译

两人在一个长为 n 排列 p 上玩游戏,先手初始可以任意选择一个位置(注意先手不能选择一个不能移动的位置),然后他们以先手选择的位置为起点后手先依次交替移动,每次只能向左移动到比当前数字小的位置(即如果 i<jpi<pj ,则可从 i 移动到 j ),如果一个人不能移动,则此人获胜,请问先手开始选择有必胜策略的位置的个数。

挺有意思的博弈论。

xx必胜位置:xx从该位置开始走,无论另一个人怎么走,xx都必胜。

xx必败位置:xx从该位置开始走,无论另一个人怎么走,xx都必胜。

先手的必胜位置 是 后手的必败位置,同理 先手的必败位置 是 后手的必胜位置。

容易发现如果先手从当前位置不能走到 先手必胜位置,则当前位置为 先手必胜位置。

反过来,如果当前位置能走到 先手必胜位置,则当前位置为 先手必胜位置。

等价于求以 i 为结尾的 LIS 长度为 2 的 i 个数。

可以用 BIT 搞到 O(nlogn)

另一个想法是记录 1i1 先手必胜位置的最小 p,记作 pos1,如果 pi<pos1(不能转移),则当前位置为先手必胜位置。

此时需要保证前面有先手必败状态转移,就再记录 1i1 先手必败位置的最小 p,记作 pos2。则一个位置为先手必胜位置的充要条件是 pos2<pi<pos1

简单维护 pos1,pos2 即可。

D Balanced String

链接

题面翻译

给你一个长为 n01 字符串,每次操作交换两个元素,求最少几次操作能使字符串的顺序对个数与逆序对个数相等。

n100,一眼 dp

考虑单个 1 对答案的影响:贡献前面 0 个数个顺序对,贡献后面 0 个数个逆序对。

于是设单个 1 的贡献为 顺序对个数 - 逆序对个数。

容易发现一种交换方案合法当且仅当所有 1 的贡献和为 0

fi,j,k1i 内有 j1,所有 1 贡献之和为 k 时合法的s1i 最小的不同个数

不难得到转移方程:

fi,j,k=min(fi1,j,k+[si=1],fi1,j1,kval(i,j)+[si=0])

其中 val(i,j) 为第 i 位之前已经放了 j11i 位再放一个 1 时这个 1 的贡献。

容易发现 val(i,j)=(ij)(tot0(ij))=2(ij)tot0

再把这坨东西带回去:

fi,j,k=min(fi1,j,k+[si=1],fi1,j1,k2(ij)+tot0+[si=0])

因为每次交换会改变两个不同位置的数,使“与 s1i 最小的不同个数”减 2

于是答案就是 fn,ntot0,02

没了。

E Fast Travel Text Editor

链接

图论好题。

考虑图论建模后跑最短路来解决。

前两种操作可以两相邻点之间建边。

第三种操作直接暴力建边显然会 T 掉,注意到字符集大小为 26,考虑对每个字母对建 262 个虚点,再从虚点向所有该字母连边。

对于所有询问,跑全源最短路显然不现实。把 ft 的路径分成两种:不使用操作三/使用操作三。

前者的答案显然是 |ft|

对于后者,按照定义,该路径上必定经过一个虚点。再把这条最短路径拆成两部分 fcicit,那么根据最短路的性质,这两条路径也必定是最短路。于是对所有虚点跑 262 遍最短路,对于每次查询枚举虚点即可解决后者。

两种情况取 min 就完了。

F Evaluate RBS

链接

看不懂

posted @   象征阳光  阅读(8)  评论(0编辑  收藏  举报  
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示