1. 程式人生 > >【Codeforces947D】Riverside Curio(思維)

【Codeforces947D】Riverside Curio(思維)

codeforce () 超過 script gpo 遞增 sid mar mark

Description

題目鏈接

Solution

設S[i]表示到第i天總共S[i]幾個標記,

那麽滿足S[i]=m[i]+d[i]+1

m[i]表示水位上的標記數,d[i]表示水位下的標記數

那麽可以發現,S[i]滿足非嚴格遞增,且相鄰2個相差不超過1

由此可轉化題目,

給你n個數,可以給任意數加上任意正整數,要求使得最後使這個數列滿足S[i]的條件

問最少加多少,這樣就簡單了

註意開long long

Code

#include<cstdio>

int n,A[100010];
long long Ans;

int main() {
    scanf("%d"
,&n); for(int i=1;i<=n;++i) { scanf("%d",&A[i]); if(A[i]<A[i-1]) Ans+=A[i-1]-A[i],A[i]=A[i-1]; } for(int i=n;i>=2;--i) if(A[i]-A[i-1]>1) Ans+=A[i]-A[i-1]-1,A[i-1]=A[i]-1; printf("%I64d\n",Ans); return 0; }

【Codeforces947D】Riverside Curio(思維)