码迷,mamicode.com
首页 > 其他好文 > 详细

【Codeforces947D】Riverside Curio(思维)

时间:2018-03-26 20:43:30      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:rip   个数   com   \n   链接   题目   blog   ble   标记   

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(思维)

标签:rip   个数   com   \n   链接   题目   blog   ble   标记   

原文地址:https://www.cnblogs.com/void-f/p/8653208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!