做題記錄

codwarm發表於2024-09-02

CF2008 G. Sakurako's Task

紀念第一次場上切的一道 G 題,想了 \(40\) 多分鐘。

題意

給定陣列 \(a\),可以進行任意次操作:選定 \(i,j\), 可以操作 \(a_i \leftarrow a_i+a_j\)\(a_i \leftarrow a_i-a_j\)
問 陣列 a 中不存在的第 \(k\) 個非負整數的最大可能為多少。

思路

首先發現這個第 \(k\) 個非負整數比較奇怪,不太好入手。但是可以發現儘量把數往小了堆是更優的。
轉變思路從操作入手,發現如果我們可以獲得一個很小的數 \(d\),且其他數都是 \(d\) 的倍數,那麼我們可以先把所有數都變成 \(0\),只剩下一個 \(d\),然後可以將陣列構造成 \(0,d,2d,3d \dots (n-1)d\),保證數都是最小的。

那麼思考如何得到最小的 \(d\),對於兩個數 a,b ,我們可以用類似輾轉相減的方法得到 \(gcd(a,b)\),同理對於 \(a_i\),我們可以得到最小的 \(d = gcd(a_1,a_2,\dots a_n)\),於是本題就做完了。