• Codeforces Round # 740 (Div.2) 比赛总结


    Codeforces Round # 740 (Div.2) 比赛总结

    上大分!

    代码能力还是差了太多,速度不快小错误一堆,不然就变色了QwQ。

    A

    题意:给出一个序列,每次可调整其 第奇数或偶数个 相邻的奇数位和偶数位 ,交替进行,问最少多少次可以将其摆成上升序列。

    签到,发现每次操作至多 (n) 轮,直接暴力复杂度 (O(n^2)) 可以过。

    B

    题意:A、B轮流发球,若 A 在 B 的回合得分,或 B 在 A 的回合得分,称作一次 break ,给出 A 和 B 的获胜轮数,求可能的 break 总数有哪些。

    考虑枚举 (k) 为可能的 break 总数,可以通过二元一次方程组解出 (k_A)(k_B) ,即 A 丢的轮数和 B 丢的轮数,判断两者是否合法即可。

    C

    题意:你有值 (x)(n) 个洞穴,每个洞穴有若干个关卡,每个关卡有权值 (w) ,能通过该洞穴当且仅当 (x > w) ,每过一个关卡能够使 (x+1) ,问能依次通过所有洞穴的最小初始 (x) ,洞穴的进入顺序不固定,同意洞穴内的关卡顺序固定。

    求出通过每个洞穴所需的最小 (x) ,并从小到大排序,这一定是最优秀的通关顺序,然后根据这个顺序再计算通关上限即可。

    D

    题意: (n) 个格子,初始在 (n) 号格,每次可以从 (x) 直接跳到 (left[ 1,x ight)) 的任意一个,或者确定一个 (z) ,跳到 (lfloor frac{x}{z} floor) 号格(对于不同的 (z) 跳到同一格算作多种情况),问跳到 (1) 号格的方案数。

    显然 DP ,设 (f_i) 表示从 (n) 跳到 (i) 的方案数, (s_i) 表示 (f_i) 的后缀和。

    第一种从 (s_{i+1})​ 转移到 (f_i)​ ,第二种枚举 (z)​ ,能够从 (x)​ 跳到 (i) 的位置范围为 (left[ z i , z(i+1) ight)) ,后缀和优化转移即可。

    时间复杂度是调和级数的, (O(n log n))

    E

    题意:一个 (n (n in mathbb{O})) 的排列,每次可以选择一段长度为奇数的前缀翻转,求出一种方案使得最后变成一个上升序列,操作数不能超过 (frac{5}{2}n)

    已经放好的数我们不去动它,于是从大到小放,又因为只能是奇数长度,所以每次会确定两个数。

    考虑每次确定最大两个数的位置,

    1. 先将奇数放到 (1)
    2. 然后将奇数放到偶数前;
    3. 将两个数翻到 (2)(3) 位;
    4. 翻转前三个数;
    5. 将目前位于 (12) 位的两数翻到序列末尾。

    这样每两个数至多操作 (5) 次,总操作次数不超过 (frac52 n)

  • 相关阅读:
    k8s
    vue-element-admin实现模板打印
    MAC系统命令
    思维导图工具
    前端如何渲染几万条数据不卡住页面?
    Echar使用案例
    .Net 相关报错解决方案
    Windows 操作技巧
    Docker&K8s
    微信网页授权原理分析
  • 原文地址:https://www.cnblogs.com/Kelvin2005/p/15184040.html
Copyright © 2020-2023  润新知