CF Global Round 10-F
阿新 • • 發佈:2020-08-17
F.Omkar and Landslide
\(Description:\)
\(n\)一堆石子,每堆高度為\(a_i\),\(a_i\)嚴格遞增,如果某一時刻\(a_i\le a_{i+1}-2\),則下一時刻\(a_i\)的高度\(+1\),\(a_{i+1}\)的高度\(-1\)
問最後穩定的狀態
\(Solution:\)
有兩個結論:
- 顯然在最後的穩定狀態中,高度是遞增的(非嚴格遞增)
- 連續的相等的高度不會超過兩個
前者很顯然
關於後者,做一個簡單解釋,連續相等的高度超過兩個的話就找不到它的上一個狀態了,也就是說石子落下來之前的狀態都是不合法的。不信的話可以自己把前面的石子往後丟。
那麼有這兩個條件,在結合原序列是嚴格遞增的,可以推出最後的形態只與石子的總高度有關,再稍微推一下就可以找規律輸出了
\(Code:\)
#include<bits/stdc++.h> using namespace std; typedef long long lol; lol n,x,sum; lol read(){ lol ans=0,f=1;char i=getchar(); while(i<'0'||i>'9'){if(i=='-')f=-1;i=getchar();} while(i>='0'&&i<='9'){ans=ans*10+i-'0';i=getchar();} return ans*f; } void write(lol x){ if(x<0){putchar('-');x=-x;} if(x>9)write(x/10); putchar(x%10+'0'); } int main(){ n=read(); for(int i=1;i<=n;i++)x=read(),sum+=x; sum-=n*(n-1)/2; lol ave=sum/n,rest=sum%n; for(int i=1;i<=n;i++){ write(i-1+ave+(i<=rest)); putchar(' '); } puts(""); return 0; }