CF2156 Codeforces Round 1061 (Div. 2) 游記(VP)
省流
心不在焉沒有狀態,\(4t\) 混出 \(1930\) 就下班。
10.29
內含劇透,請vp后再來。
不是題解!!!!!!!
賽前
晚上蚊子很多,沒怎么睡覺,處在一種困與不困的疊加態,但總之狀態不好。
賽時
A 題要求把一個給定的數 \(n\) 分成不減小的三份,然后把第一份作為答案,第三份作為新的 \(n\)。如果 \(n \leq 2\) 則結束。我一開始想著直接平分就行了,然后掛掉,重新思考一下。想到平分的話最后是趨近 \(\frac{1}{3}\),而如果分成 \(1\),\(1\),\(n-2\) 則趨近 \(\frac{1}{2}\),按照這樣的寫法就通過了。
B 題容易發現的模擬,不細說。
C 題是給了 \(n\) 個數,可以擦除其中的 \(k\) 個數,或者把其中一些數拆成不遞減的三份,并刪掉中間那一份。問經過這些操作后最大的 gcd 是多少。先考慮不限次數的第二種操作,發現一種簡單的想法是把 \(n\) 可以平分成三份為 gcd,但這樣是不行的,因為如果不能平分的話第三個將不得不增大為我們不希望看到的數,所以只能構成 \(\lfloor{\frac{a_i}{4}}\rfloor\) 的任何數。當然他的 gcd 也可以是直接自己的因數。于是用差分數組求出每個 gcd 可以滿足的個數,如果小于等于 \(k\) 就可以作為答案。
D 題有一個隱藏的排列,其中每次詢問可以對除了最后一個的某個數詢問一個值 \(x\),評測機會返回 \(x\) 與你選擇的數的按位與是否為 \(0\)。要求在 \(2 \times n\) 次詢問內求出最后一個數。想到相比返回 \(1\) 返回 \(0\) 更有用,因為可以確定某個數的那一塊都是 \(0\),進而想到可以通過 \(0\) 的數量是否缺少一個判斷剩下的那個數這些位是否全 \(0\),這樣每次就都可以折半。不過很難實現。后來想到并不用一塊一塊求,只需要每一位都判斷要求的數是 \(0\) 還是 \(1\) 每次就也都是折半的。
賽后
沒什么事了,因為狀態很爛沒看后面的題目。
2025年10月29日

浙公網安備 33010602011771號