zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 110 (Rated for Div. 2) 题解(A-E)

    A. Fair Playoff

    模拟。

    B. Array Reodering

    贪心。

    对于(a_i),统计(1 le j le n, j e i)(gcd(a_i, 2a_j) > 1)的个数,作为(b_i)

    (b_i)越大,越往前放。

    C. Unstable String

    对于偶数下表的字符,若其不为?,则将其翻转一下,即0变为11变为0。现在,若一个子串同时包含01,则该子串不合法。

    现在可以用双指针(O(n))的到答案:不断让右端点加一,若加一后子串不合法,则不断让左端点加一,直至子串合法。

    D. Playoff Tournament

    观察到比赛间是二叉树的结构,且树高为(k)。那么如果可以把树建出来,就可以(O(k))更新,(O(1))查询结果。

    然后建树就是借助队列自底向上建,这个模拟一下就可以了。

    每一个节点,也就是一场比赛,若结果已知,那么可能的胜者数量就已知,只是看是左儿子还是右儿子的胜者。否则其可能的胜者数量就是两个子节点可能的胜者数量之和。

    更新的话就是找到对应的节点,然后不断向上跳到根,沿途更新答案。

    E. Gold Transfer

    操作1就模拟一下就好了。

    操作2的话,因为要花费最小,所以相当于每次找到离根最近且还有剩余的节点,在那个节点买金子,重复直到没有金子可买或者已经完成了购买任务。

    注意到每次是优先买便宜的,所以如果一个节点一个节点买,购买的次数也不会太多。这个次数至多为(O(n+q)),因为每个节点至多被买空一次,每个操作2钱花完了也就停了。

    现在只需要快速找到离根最近且还有剩余的节点,借助倍增(类似倍增求LCA)的思想可以(O(log n))的找到。

    现在模拟一下就可以(O(n log n))解决了。

  • 相关阅读:
    Egret Inspector google 插件 浏览器报错的解决方案:
    egret 项目 支持 es6 解决方案
    promise-abortable
    BaseSocket
    【译】async/await 优点、陷阱以及如何使用 (经验总结)
    WebSocket 断线重连引入心跳的原因
    node js 项目: 采用typescript 编写的好文章
    创建Node.js TypeScript后端项目 demo
    vs code 提高工作效率的办法:
    cocos2d-x 贝塞尔曲线(Bezier)用法详解
  • 原文地址:https://www.cnblogs.com/zengzk/p/14851850.html
Copyright © 2011-2022 走看看