首页 > 其他 > 详细

HDU 5191

时间:2015-03-21 22:47:45      阅读:380      评论:0      收藏:0      [点我收藏+]

好端端的被HACK掉了。。。应该是在两端都要补W个0才对,之前只想到要在后面补足0,没想到前面也应该补足,因为前面即便存在0也可能使得移动的积木数最少。。

T_T

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL __int64
using namespace std;

LL height[150005];
LL in[150005];
LL out[150005];

LL mint(LL a,LL b){
    if(a<b) return a;
    return b;
}
LL maxt(LL a,LL b){
    if(a>b) return a;
    return b;
}

int main(){
    LL n,w,h;
    while(scanf("%I64d%I64d%I64d",&n,&w,&h)!=EOF){
        LL sum=0;
        memset(height,0,sizeof(height));
        for(LL i=w+1;i<=n+w;i++){
            scanf("%I64d",&height[i]);
            sum+=height[i];
        }
        if(sum<w*h) puts("-1");
        else{
            n=n+w+w;
            in[0]=out[0]=0;
            LL ans=(1ll<<62);
            for(LL i=1;i<=n;i++){
                if(height[i]>=h){
                        out[i]=out[i-1]+height[i]-h;
                        in[i]=in[i-1];
                }
                if(height[i]<=h){
                in[i]=in[i-1]+h-height[i];
                out[i]=out[i-1];
                }
                if(i-w>=0){
                    ans=mint(ans,maxt(in[i]-in[i-w],out[i]-out[i-w]));
                }
            }
            printf("%I64d\n",ans);
        }
    }
    return 0;
}

  

HDU 5191

原文:http://www.cnblogs.com/jie-dcai/p/4356377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!