zoukankan      html  css  js  c++  java
  • Codeforces Round #731(Div. 3) | 题解(A

    周六真的是太快乐了。

    写完F差不多到零点了,大概猜G是建出SCC然后乱搞之类的题目吧。

    但是明天上班,怕睡过头上班迟到,就先休息了。

    A. Shortest Path with Obstacle

    三点不共线的时候,就是A和B之间的曼哈顿距离。因为最短路径不止一条,所以不会受F影响。

    三点共线的时候就需要绕路,多花费2的代价。

    B. Alphabetical Strings

    维护两个指针分别指向当前字符串的两个端点。

    然后每次枚举看当前字母是在那个端点上,然后移动端点。

    如果不是端点,那就无解了。

    C. Pair Programming

    一开始想歪了想到DP去了,仔细想想还是挺简单的,就能操作就操作完事了。

    具体就是:看A能不能操作,能就操作,不然就再看B能不能操作,能就操作,不能就无解。

    D. Co-growing Sequence

    将所有数都看成29位的二进制数。

    易得(y_1 = 0)(z_1 = x_1)

    因为要使字典序最小,不妨从前面开始往后面枚举,然后每次尽量把(y_i)搞小。

    先令(y_i = g(x_i))(g(n))表示(n)按位取反。现在(x_i oplus y_i)是全1,必定符合条件。

    然后因为要尽量小,所以从(y_i)的高位开始枚举,看当前位的(1)能不能变成0,能变就变。(贪心)

    然后就没了,(O(n log n))搞定。

    E. Air Conditioners

    题目给的式子还挺迷惑的,要记得(a_j)其实就是空调的下标。

    对于每一个位置(i),可以将空调分为两类:前面的和后面的。分别计算两边的最小值,最后再取一遍最小值,就能得到答案。

    对于前面的空调,记它在位置(j),它对(i)的贡献为(t_j - j + i)

    对于后面的空调,记它在位置(j),它对(i)(t_j + j - i)

    因为当前枚举到了(i),所以(i)可以视为常数,而剩下的部分就是一个前缀最小值和一个后缀最小值,(O(n))预处理一下完事了。

    ATTENTION:有空调的地方并不意味着温度就确定了,没仔细看题喜提一个WA on test 2。

    F. Array Stabilization (GCD version)

    直接二分答案,然后(O(nlog n))检测是否满足条件。

    由于元素是环状排列的,这一类问题的经典处理方法:复制一遍原序列粘到后面。现在就从环变成序列了。

    注意到,对于(a_i)(k)轮之后,(a_i = gcd(a_i, a_{i + 1, dots, a_{i + k}}))

    如果能(O(log n))获得区间GCD,那么就能(O(n log n))求出所有元素(k)轮后的值,然后就能判断是否满足条件了。

    区间GCD可以RMQ写因为GCD满足可重复贡献,也可以搞差分然后线段树维护之类的。

    后一种做法还可以支持修改操作,不过本题不需要修改操作。

    G. How Many Paths?

    传送门

  • 相关阅读:
    介绍Collection框架的结构;Collection 和 Collections的区别
    Mybites和hibernate的优缺点和区别2
    Mybites和hibernate的优缺点和区别
    AJAX如何获取从前台传递过来的数据然后在通过servle传递给后台
    list map set 集合的区别
    乐观锁和悲观锁的区别
    python生产消费Kafka
    python类型转换
    python实现远程方法调用
    Scala常用数据结构
  • 原文地址:https://www.cnblogs.com/zengzk/p/14995424.html
Copyright © 2011-2022 走看看