省选模拟25 题解

A. 环

是一道很巧妙的构造题。 

考虑写出满足条件的 $s_i,s_{i+1}$ 一定满足的式子。

设 $x_{i,j}$ 表示 $s_i$ 中第 $j$ 个 $1$ 的位置。

由操作A有 $k*t+\sum \limits_{j=1}^k x_{i,j}\equiv \sum \limits_{j=1}^k x_{i+1,j}\pmod n$ ,其中 $t$ 为任意整数。

由操作B有 $1+\sum \limits_{j=1}^k x_{i,j}\equiv \sum \limits_{j=1}^k x_{i+1,j}\pmod n$。

作减法可得 $1 \equiv k*t \pmod n$ ,所以 $k$ 与 $n$ 互质,是存在合法方案的前提。

考虑直接构造一组合法方案 $x_{i,j}=\dfrac{i+j-1}{k} \bmod n$。

容易发现 $s_i$ 对应着 $s_{i-1}$ 右移 $\frac{1}{k}$ 位,即A操作。

同时有 $x_{i,k}=x_{i-1,1}+1$ ,对应着B操作。

因为互质,$x_i$显然是不重的。

B. DNA序列

考虑最优解是由 $1$ 到 $n$ 按顺序来的。

第一想法是从前往后贪心选,然后发现局部最优并不是全局最优,然后就伪了。

所以考虑倒着考虑,此时因为后面确定,局部最优就是全局最优。

数据范围很小,可以随便暴力。

正解是将每个串 $s_i$ 分解为 $X^a+Y+'Z'$ ,其中 $X$ 为最短的满足 $X^{\infty}<s_i$ 的 $s_i$ 的前缀, $'Z'$ 为加入的表示最大的字符。

将这些串按第一关键字为 $X^{\infty}$ 升序,第二关键字为 $Y+'Z'$ 降序进行排序。

大概可以理解,通过这样的做法,可以每次找到一个 $X$ ,然后把这个 $X$ 对应的最小的 $Y$ 放到最后面,和下一个 $X$ 抢位置。

这样的话,最优解是由 $1$ 到 $n$ 按顺序来的,可以直接做上面那个贪心。

C. 探寻

这类闯关+通关奖励的题有一些比较好的贪心做法。

放到树上常常可以通过合并来进行考虑。

考虑本题的一些特殊性质,并不需要闯完每一关,只要用最小的代价找到母矿就完事了。

假设母矿的收益很大,那么我们只需要闯 收益-代价>0 的关。

对于这样的问题,可以直接按代价进行排序。

也就是说我们通过从小到大考虑代价,尽量去赚钱。

然后分别考虑两种情况:

1.父亲节点已经选过,那么直接选当前节点。

2.父亲节点还没选过,现在是选不了当前节点的,但是为了将来能选到当前节点,将当前节点和父亲节点合并为一个点。

因为涉及到合并操作,为了判断父亲节点是否被选过,需要用并查集维护。

猜你喜欢

转载自www.cnblogs.com/skyh/p/12328016.html