雜題選講
Omkar and Landslide
可以發現,我們把一輪操作分解成對每個位置的單個操作,那麼這些單個操作的順序是可以隨意調換的。由於最後一定會操作到不能繼續操作為止,這樣一輪一輪的操作就可以等價為:順序操作 \(1\) 到 \(n\) 的每個位置,若這個點能向前滑坡,就一直滑到不能滑為止。
那麼從這樣的操作方式中,我們可以發現一個結論:一定只存在不超過 \(1\) 個 \(i\),使得最終陣列中 \(h_i=h_{i+1}\)。
具體證明參見這篇題解。大概意思就是說對 \(1\) 到 \(n\) 一次進行上述操作時,若前面沒有相同位置,則至多出現一個相同位置;若前面有相同位置,則會減少一個相同位置或不變,於是最終的相同位置至多 \(1\) 個。
有了這個結論之後,我們先假設不存在相同位置,設第一個位置的最終值為 \(x\),因為最後的陣列是一個等差數列,和就為 \(\cfrac{n(2x+n-1)}{2}\)。設原數列的和為 \(s\),則前面的式子就等於 \(s\),於是可以直接解出 \(x\) 的值。
再考慮有一個相同位置 \(p\) 的情況,那麼此時 \(\cfrac{n(2x+n-1)}{2}-p=s\)。那麼先對第一種情況解出的 \(x\) 取上整,這樣得到的也是第一個位置的值。所以 \(p=\cfrac{n(2x+n-1)}{2}-s\),那麼將等差數列的後 \(p\) 個位置減去 \(1\) 即可得到答案。