Educational Codeforces Round 110 (Rated for Div. 2) 题解(A-E)
Posted _Backl1ght随缘更新的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 110 (Rated for Div. 2) 题解(A-E)相关的知识,希望对你有一定的参考价值。
A. Fair Playoff
模拟。
B. Array Reodering
贪心。
对于\\(a_i\\),统计\\(1 \\le j \\le n, j \\ne i\\)且\\(\\gcd(a_i, 2a_j)\\)的个数,作为\\(b_i\\)。
\\(b_i\\)越大,越往前放。
C. Unstable String
对于偶数下表的字符,若其不为?
,则将其翻转一下,即0
变为1
,1
变为0
。现在,若一个子串同时包含0
和1
,则该字串不合法。
现在可以用双指针\\(O(n)\\)的到答案:不断让右端点加一,若加一后字串不合法,则不断让左端点加一,直至字串合法。
D. Playoff Tournament
观察到比赛间是二叉树的结构,且树高为\\(k\\)。那么如果可以把树建出来,就可以\\(O(k)\\)更新,\\(O(1)\\)查询结果。
然后建树就是借助队列自底向上建,这个模拟一下就可以了。
每一个节点,也就是一场比赛,若结果已知,那么可能的胜者数量就已知,只是看是左儿子还是右儿子的胜者。否则其可能的胜者数量就是两个子节点可能的胜者数量之和。
更新的话就是找到对应的节点,然后不断向上跳到根,沿途更新答案。
E. Gold Transfer
操作1就模拟一下就好了。
操作2的话,因为要花费最小,所以相当于每次找到离根最近且还有剩余的节点,在那个节点买金子,重复直到没有金子可买或者已经完成了购买任务。
注意到每次是优先买便宜的,所以如果一个节点一个节点买,购买的次数也不会太多。
现在只需要快速找到离根最近且还有剩余的节点,借助倍增(类似倍增求LCA)的思想可以\\(O(\\log n)\\)的找到。
现在模拟一下就完事了。
以上是关于Educational Codeforces Round 110 (Rated for Div. 2) 题解(A-E)的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 7 A
Educational Codeforces Round 7
Educational Codeforces Round 90
Educational Codeforces Round 33