Building Blocks

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2209    Accepted Submission(s): 509

Problem Description
After enjoying the movie,LeLe went home alone. LeLe decided to build blocks.
LeLe has already built n piles. He wants to move some blocks to make W consecutive piles with exactly the same height H.

LeLe
already put all of his blocks in these piles, which means he can not
add any blocks into them. Besides, he can move a block from one pile to
another or a new one,but not the position betweens two piles already
exists.For instance,after one move,"3 2 3" can become "2 2 4" or "3 2 2
1",but not "3 1 1 3".

You are request to calculate the minimum blocks should LeLe move.

 
Input
There are multiple test cases, about 100 cases.

The first line of input contains three integers n,W,H(1≤n,W,H≤50000).n indicate n piles blocks.

For the next line ,there are n integers A1,A2,A3,……,An indicate the height of each piles. (1≤Ai≤50000)

The height of a block is 1.

 
Output
Output the minimum number of blocks should LeLe move.

If there is no solution, output "-1" (without quotes).

 
Sample Input
4 3 2
1 2 3 5
4 4 4
1 2 3 4
 
Sample Output
1
-1

Hint

In first case, LeLe move one block from third pile to first pile.

 
Source
 
题意:在一个区间里面进行块的增删,让某段长度为W的区间高度都为H,每次移动一块,问最少要移动多少次?
题解:刚开始漏看了每次移动一块这个条件,打死也做不出来..这个题目的解法就是区间的移动,左端点删除以及右端点的添加来维护所有长度为W的区间,但是要在前面和后面添W个0块,因为我们有可能是往两边补。维护两个变量,一个是把高变矮 t,一个是把矮变高 s,最开始的区间是[1,W],这个区间我们要将矮的变高,所以最开始我们 s = w*h ,ans =w*h
,然后我们的区间右移到[2,W+1],这时我们要把1删除,然后将w+1添加进去,这样的话对 s,t进行加减,然后取个大值就行了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long LL;
const int N = ;
LL n,w,h;
LL high[N];
int main()
{
while(scanf("%lld%lld%lld",&n,&w,&h)!=EOF){
LL sum = ;
memset(high,,sizeof(high));
for(int i=;i<w+;i++){
high[i]-=h;
}
for(int i=w+;i<w++n;i++){
scanf("%lld",&high[i]);
sum+=high[i];
high[i]-=h;
}
for(int i=w++n;i<=w+w+n;i++){
high[i]-=h;
}
if(sum<h*w){
printf("-1\n");
continue;
}
LL s=w*h,t=,ans = w*h; ///s维护将高的拿走,t维护将矮的补上,最开始[1,w]要补w*h进去,所以ans初始化w*h
for(int i=w+;i<=w+w+n;i++){
if(high[i-w]>) t-=high[i-w]; ///删除第 i-w 块
else s+=high[i-w];
if(high[i]>) t+=high[i]; ///添加第 i 块
else s-=high[i];
ans = min(ans,max(t,s));
}
printf("%lld\n",ans);
}
return ;
}

hdu 5191(思路题)的更多相关文章

  1. hdu 4908(思路题)

    BestCoder Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. Proud Merchants HDU - 3466 (思路题--有排序的01背包)

    Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerfu ...

  3. hdu 5101(思路题)

    Select Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. hdu 5063(思路题-反向操作数组)

    Operation the Sequence Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  5. hdu 4859(思路题)

    Goffi and Squary Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. hdu 4956(思路题)

    Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. hdu 5400(思路题)

    Arithmetic Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. HDU 1173 思路题

    题目大意 有n个地点(坐标为实数)需要挖矿,让选择一个地点,使得在这个地方建造基地,到n个地点的距离和最短,输出基地的坐标. 题解+代码: 1 /* 2 把这个二维分开看(即把所有点投影到x轴上,再把 ...

  9. 51nod P1305 Pairwise Sum and Divide ——思路题

    久しぶり! 发现的一道有意思的题,想了半天都没有找到规律,结果竟然是思路题..(在大佬题解的帮助下) 原题戳>>https://www.51nod.com/onlineJudge/ques ...

随机推荐

  1. poj1789 Truck History最小生成树

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20768   Accepted: 8045 De ...

  2. 【SSH】——Struts2中的动态方法调用(二)

    当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下: public class UserAct ...

  3. Java空指针异常解决方法

    Throwable是所有错误或异常的超类,只有当对象是这个类的实例时才能通过Java虚拟机或者Java throw语句抛出. 当Java运行环境发出异常时,会寻找处理该异常的catch块,找到对应的c ...

  4. Struts2值栈

    一.前言 很多事儿啊,就是“成也萧何败也萧何”,细想一些事儿心中有感,当然,感慨和本文毛关系都没有~想起之前有篇Struts2中值栈的博客还未完工,就着心中的波澜,狂咽一把~ 二.正文 博文基于:st ...

  5. Hibernate基本演示

    保存一个对象到数据库中 目录结构 hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hi ...

  6. C#中的String.Format方法

    定义String.Format是将指定的String类型的数据中的每个格式项替换为相应对象的值的文本等效项.(1)string p1="xiaomeng";string p2=&q ...

  7. P1140 相似基因

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...

  8. Java Integer比较

    今天看微信做了一个选择题,对Integer比较结果有点意外,题目如下: public static void main(String[] args) { Integer a = 1; Integer ...

  9. visio应用程序相关设置-选项-视图

    1.是否显示"新建"选项卡,可读/写 ApplicationSettings.ShowChooseDrawingTypePane m_Visio.Window.Applicatio ...

  10. 阿里巴巴前端面试parseInt()函数的面试题

    JavaScript 是弱类型语言,为了保证数值的有效性,在处理数值的时候,我们可以对数值字符串进行强行转换.如 parseInt 取整和 parseFloat 取浮点数.Java 也有 Intege ...