• Codeforces Round #786 (Div. 3)


    A. Number Transformation

    \(a = 1\),则\(b = \dfrac{y}{x}\)

    B. Dictionary

    暴力预处理出完整的字典,然后用std::map存单词和下标的映射。

    C. Infinite Replacement

    如果\(t\)等于a,则答案为\(1\)

    否则,如果\(t\)包含a,则有答案为无穷大。

    否则,\(s\)中的每个元素都有两种可能,替换或者不替换,即答案为\(2^n\),其中\(n = |s|\)

    D. A-B-C Sort

    先做了E,F才返回来做D。

    对于\(n = 3\),所有可能的结果有\(a_1a_2a_3\)\(a_1a_3a_2\)

    对于\(n = 4\),所有可能的结果有\(a_1a_2a_3a_4\)\(a_1a_2a_4a_3\)\(a_2a_1a_3a_4\)以及\(a_2a_1a_4a_3\)

    以此类推,发现题目所给的操作等价于:当\(n - i\)为偶数的时候,可以交换\(a_i\)\(a_{i+1}\)

    对于满足条件的\(i\),如果\(a_i > a_{i + 1}\),就交换两元素的位置,否则不变。

    然后看数组是否是非降序即可。

    E. Breaking the Wall

    可能的操作共有3种:

    1. 砸第\(i - 1\)道墙和第\(i + 1\)道墙。
    2. 砸第\(i\)道墙和第\(i + 1\)道墙。
    3. 砸第\(i\)道墙和第\(j\)道墙。

    对于第一种操作,要么其中一个减2,要么两个都减1,代价为\(\lceil \dfrac{a_{i-1} + a_{i + 1}}{2} \rceil\)

    对于第二种操作,可能砸其中一个能把另外一个顺便砸倒,以\(i\)为例,代价为\(\lceil \dfrac{a_i}{2} \rceil\);否则就列不等式方程组然后解方程算代价,可得代价为\(\lceil \dfrac{a_i + a_{i + 1}}{3} \rceil\)

    对于第三种操作,\(j\)的选择可以贪心选,共有4个候选:\(i - 1\)\(i + 1\)\(p(i - 2)\)\(s(i + 2)\)\(p(x)\)表示下标小于等于\(x\)的元素中最小值所在下标,\(s(x)\)表示示下标大于等于\(x\)的元素中最小值所在下标。

    F. Desktop Rearrangement

    记桌面上的图标数量为\(count\)

    由于行数和列数都是固定的,所以重排之后有图标的区域是可以直接算出来的。假设已经位于这个区域中的图标数有\(sum\)个,则还需要的操作数为\(count - sum\)

    将桌面上的位置按下面这种方式重新编号。

    147
    258
    369
    

    重新编号之后,桌面重排之后图标的位置就会是一个前缀,然后就是单点修改+前缀的和问题了,直接树状数组搞定。

    G. Remove Directed Edges

    DAG上DP。

    观察可得:最后的答案会是一条

    假设\(dp_i\)表示以\(i\)为终点的链的最大长度。对于节点\(u\),考虑和他相邻的点\(v\)是否拓展以\(u\)为终点的链。

    因为是链,所以除了边\(u \rightarrow v\)以外,\(u\)的其他出边和\(v\)的其他入边都可以删去,所以如果\(outdeg_u > 1\)\(indeg_v > 1\)的话,\(v\)就可以在\(u\)的基础上再拓展一。然后因为是DAG,所以对于\(v\)可能会有多个\(u\),即\(dp_v = \max dp_{(u, v) \in E} dp_u + 1\)

    搞个拓扑排序,然后算DP即可。

  • 相关阅读:
    C语言I博客作业03
    C语言I博客作业02
    JSON Template
    Mac系统登录不进系统解决办法
    Mac怎么安装并配置Homebrew?
    tensorflow 安装命令
    删除表重复数据
    redhat安装docker
    Rabbit MQ 入门指南
    Maven 集成Tomcat7插件
  • 原文地址:https://www.cnblogs.com/zengzk/p/16217545.html
Copyright © 2020-2023  润新知