Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)

HaneDaniko發表於2024-10-08

致敬傳奇調題王 HDK

A.Meaning Mean

給定一個序列 \(a\),每次選擇 \(i,j\ (i\neq j)\),使得其縮成一個值為 \(\lfloor\frac{a_i+a_j}{2}\rfloor\) 的數,直至剩餘一個數,求最終答案的最大值

一開始想的是最小化 \(\lfloor\frac{a_i+a_j}{2}\rfloor\) 的損失,後來發現這點損失基本上可以不管,因為最後的值一定可以表示成 \(\lfloor\frac{a_i+\lfloor\frac{a_j+\cdots}{2}\rfloor}{2}\rfloor\) 的形式,可以近似看成 \(a_i\times 2^{-1}+a_j\times 2^{-2}\times\cdots\),最大化其值也即將最大值放在前面,貪心即可


B.Maximize Mex

給定一個序列 \(a\) 與一個數 \(x\),可以進行如下操作

  • 選擇任意一個 \(i\),使得 \(a_i\) 自增 \(x\)

最大化其 \(\text{mex}\)

發現一個 \(a_i\) 只能由滿足 \(a_j\equiv a_i\pmod x\)\(a_j\le a_i\)\(j\) 轉移得到

因此對 \(a_i\mod x\) 開桶,求 \(\text{mex}\) 肯定是列舉自然數,\(a_j\le a_i\) 的條件可以透過每次轉移完再放進桶裡來實現,每次從桶裡拿一個出來填 \(\text{mex}\)


C2.Adjust The Presentation (Hard Version)

相關文章