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) > 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)\)解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM