Q-S

Posted on 2022-12-11 15:24  Capterlliar  阅读(65)  评论(0编辑  收藏  举报

Q. Defender of Childhood Dreams

题意:给出有n个点的竞赛图,要求给每条边赋一种颜色,使得图中任意长度大于等于k的路径都包含两种颜色。

解:一维向高维扩展,分组构造

考虑简单情况,即一条链的时候。假设k=3,那就是给每条边1,1,2,1,1,2,1,1,2……这样染色。现在把它扩展一下,如下图。将用蓝色边相连的结点缩为一个结点,即每3个结点看作一个结点,这样得到了所有边都是红色的一条链;然后再按1,1,2对这条链进行操作,将一些边染成绿色,如此重复操作,最后每个结点代表了一组结点。一组结点中的每一个结点,到另一组结点中的每个结点的边的颜色,为两组结点的代表之间边的颜色。

R. Changing Brackets

题意:给定一个含有方括号和小括号的括号串,每改变一个括号的方向花费为0,将一种括号改为同方向的另一种括号花费为1。有若干次询问,每次询问该括号串的一个子数组,问令其合法的最小花费是多少。

解:改变括号方向花费为0,观察得到只要不出现类似于([([这种组合,都可以改变方向使其合法。令小括号为1,方括号为0。样例1即为101101110000,题意可以变成花费最少,使得10串由若干个偶数长度的回文组成。数据范围不允许dp,那么就要构造一种赋值方案,使其能O(1)地判断一段数据是否符合条件,考虑前缀和。两两分组,令10为1,01为-1,00和11都为0,分别按奇数偶数位计算前缀和即可。

(然后看了题解发现实际上计算奇数偶数位两种括号数量就行了。。。)

S. Diane

(终于有一个味够正的构造题了)

题意:用26个小写字母构造一个长为n的字符串,使其任意一个子数组只在原串中出现奇数次。

解:首先n小于等于26的话可以每个字母输出一遍(废话)。考虑一下全排列,发现很难算;考虑将指定排列按不同字母组合输出若干次,要么长度不够,要么也很难凑;最省心的还是一个字母输出n次,这样的话会有n个长为1的,n-1个长为2的……现在要消灭偶数项。再来一个长为n-1的和它一凑,计划通,中间随便填点什么字母即可。