CF1392F Omkar and Landslide 題解
阿新 • • 發佈:2022-05-28
由於一開始的序列中沒有兩個相同的 \(h\),猜測最終的序列中 \(h_i=h_{i+1}\) 的位置最多隻有一個。大概可以這樣感性理解:考慮從左到右做“滑坡”,如果之前 \(h_i=h_{i-1}\),那麼後面要麼 \(h\) 都不相同,要麼有一個位置相同了會帶動一段都 \(+1\),導致 \(h_i\not= h_{i-1}\),無論如何只能有一個位置是相同的。
那這樣就很好辦了,可以證明任意一個 \(\sum h_i\) 都一一對應了一個序列。首先考慮沒有相鄰位置相同的情況,通過 \(\sum h_i=\frac{n(2b_1+n-1)}2\) 求出開頭的值 \(b_1\),根據這個值找有沒有相鄰位置相同的數就可以了。
點選檢視程式碼
int main(){ int n; read(n);ll sum=0; for(int i=1;i<=n;++i){ ll x;read(x); sum+=x; } ll tmp=(sum*2-1)/n+1; tmp=(tmp-(n-1)+1)/2; if(n*(2*tmp+n-1)/2==sum){ for(int i=1;i<=n;++i) print(tmp+i-1),print(' '); return 0; } ll ttmp=sum-(n-1)*(2*tmp+n-2)/2; ll j=tmp; for(int i=1;i<n;++i,++j){ print(j),print(' '); if(j==ttmp) print(j),print(' '); } return 0; }