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} mod 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.父亲节点还没选过,现在是选不了当前节点的,但是为了将来能选到当前节点,将当前节点和父亲节点合并为一个点。
因为涉及到合并操作,为了判断父亲节点是否被选过,需要用并查集维护。