zoukankan      html  css  js  c++  java
  • 省选模拟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} 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.父亲节点还没选过,现在是选不了当前节点的,但是为了将来能选到当前节点,将当前节点和父亲节点合并为一个点。

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

  • 相关阅读:
    获取短信验证码(60s)-input
    springboot环境搭建(基于eclipse插件)
    【python】hanio【汉诺塔】
    Integer 和 Long 类型之间转换
    ora-12638 credential retrieval failed
    win7变热点
    MyEclipse的Expressions没有结果的解决办法
    MyEclipse运行到断点也跳过的问题
    org.hibernate.PropertyNotFoundException: Could not find a getter for employee in class com.itcast.f_hbm_oneToMany.Department
    "Debugging not possible in single session mode"
  • 原文地址:https://www.cnblogs.com/skyh/p/12328016.html
Copyright © 2011-2022 走看看