4 3 2 1 2 3 5 4 4 4 1 2 3 4
1 -1HintIn first case, LeLe move one block from third pile to first pile.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#define INF 1010010101000
#define ll long long
using namespace std;
int n,m,h;
ll a[50020*3];
ll mmin(ll a,ll b) {
    if(a>b)return b;
    return a;
}
ll mmax(ll a,ll b) {
    if(a<b)return b;
    return a;
}
int main() {
    while(cin>>n>>m>>h) {
        ll sum=0;
        for(int i=1; i<=m; i++)
            a[i]=0;
        for(int i=m+1; i<=m+n; i++) {
            scanf("%I64d",&a[i]);
            sum+=a[i];
        }
        for(int i=m+n+1; i<=n+m+m; i++)
            a[i]=0;
        ll ans=0;
        if(sum<(ll)h*m)printf("-1\n");
        else {
            int first=1;
            ll Min=INF;
            ll ans1=0;
            ll ans2=0;
            for(int i=1; i<=m; i++) {
                if(a[i]>h)
                    ans1+=a[i]-h;
                else
                    ans2+=h-a[i];
            }
            ans=max(ans1,ans2);
            Min=ans;
            for(int i=m+1; i<=m+m+n; i++) {
                if(a[first]>h)
                    ans1-=a[first]-h;
                else
                    ans2-=h-a[first];
                if(a[i]>h)
                    ans1+=a[i]-h;
                else
                    ans2+=h-a[i];
                first++;
                ans=mmax(ans1,ans2);
                Min=mmin(ans,Min);
            }
            cout<<Min<<endl;
        }
    }
}
BC#34 1002 hdu 5192 Building Blocks
原文:http://blog.csdn.net/acm_baihuzi/article/details/44523117