hdu 5190 Building Blocks
看完电影后,乐乐回家玩起了积木。
他已经搭好了n堆积木,他想通过调整积木,使得其中有连续W堆积木具有相同的高度,同时他希望高度恰好为H。
乐乐的积木都这了,也就是说不能添加新的积木,只能移动现有的积木。
他可以把一个积木从一堆移动到另一堆或者新的一堆,但是不能移动到两堆之间。比如,一次移动之后,"3 2 3" 可以变成 "2 2 4" 或者 "3 2 2 1",但是不能变成"3 1 1 3".
请你帮他算算,需要移动的最少积木数。
有多组测试数据,大约100组。
第一行三个整数,n,W,H,n表示有多少堆积木。
第二行n个元素,表示这n座积木的高度。
所有数据的范围[1,50000];
输出最少需要移动的次数,如果无法完成输出-1。
4 3 2
1 2 3 5
4 4 4
1 2 3 4
1
-1
题目分析:
枚举最终的W堆积木在哪,确定了区间,那么就需要把高于H的拿走,低于H的补上,高处的积木放到矮的上面,这样最优。因此把这个区间变成W*H的代价就是max(∑(Hi−H),∑(H−Hj))(Hi>H,Hj≤H)即在把高的变矮和把矮的变高需要的移动的积木数
取较大的。从第一个区间[1,W]到第二区间[2,W+1]只是改变了2堆积木,可以直接对这两堆积木进行删除和添加来维护∑(Hi−H)和∑(H−Hj)。
需要注意的是,最终选取的W堆积木中,有可能有几堆原本不存在。如 9 8 7 形成3*3,可把3堆积木变成5堆 3 3 3 8 7,最少移动6个积木。因此需要在n堆积木两端补上W个0。整个问题的复杂度是O(n+W).
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 150010
#define INF 10000000
using namespace std;
typedef long long LL;
LL a[maxn],n;
int main()
{
LL w,h;
int num;
while(scanf("%I64d %I64d %I64d",&n,&w,&h)!=EOF)
{
memset(a,0,sizeof(a));
LL sum=0;
for(int i=w+1; i<=n+w; i++)
{
scanf("%I64d",&a[i]);
sum+=a[i];
}
if(sum<w*h)
printf("-1\n");
else
{
LL sum_c=0,sum_r=w*h;
LL ans=sum_r;
for(int i=2; i<=w+n+1; i++)
{
if(a[i-1]<h)
sum_r-=h-a[i-1];
else
sum_c-=a[i-1]-h;
if(a[i+w-1]<h)
sum_r+=h-a[i+w-1];
else
sum_c+=a[i+w-1]-h;
//printf("%I64d %I64d\n",sum_r,sum_c);
ans=min(ans,max(sum_r,sum_c));
}
printf("%I64d\n",ans);
}
}
return 0;
}
hdu 5190 Building Blocks的更多相关文章
- HDU—— 5159 Building Blocks
Problem Description After enjoying the movie,LeLe went home alone. LeLe decided to build blocks. LeL ...
- HDU 5191 Building Blocks
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5191 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- Intel® Threading Building Blocks (Intel® TBB) Developer Guide 中文 Parallelizing Data Flow and Dependence Graphs并行化data flow和依赖图
https://www.threadingbuildingblocks.org/docs/help/index.htm Parallelizing Data Flow and Dependency G ...
- bc.34.B.Building Blocks(贪心)
Building Blocks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- DTD - XML Building Blocks
The main building blocks of both XML and HTML documents are elements. The Building Blocks of XML Doc ...
- 企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)
之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并无太多能力和机会对TOGAF进行理论和实际的联系,仅可对标准的文本 ...
- TOGAF架构内容框架之构建块(Building Blocks)
TOGAF架构内容框架之构建块(Building Blocks) 之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并 ...
- HDU 5033 Building(单调栈)
HDU 5033 Building(单调栈) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5033 Description Once upon a ti ...
- [翻译]Review——How JavaScript works:The building blocks of Web Workers
原文地址:https://blog.sessionstack.com/how-javascript-works-the-building-blocks-of-web-workers-5-cases-w ...
随机推荐
- 第一个servlet小例子
1.sendForward.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...
- win7 64位安装mongodb及管理工具mongoVUE1.6.9.0
下载mongodb安装程序,官网地址:http://www.mongodb.org/downloads 我的是64位win7,选择: 然后双击下载的文件安装,我安装到本地的D盘里面 然后配置系统环境变 ...
- wp8.1 C#技巧: 计时器
public MainPage() { this.InitializeComponent(); this.timer = new DispatcherTimer();//新建委托时间实例 timer. ...
- AndroidStudio导入第三方开源库 --文件夹源码
1 在已打开的项目中 File-New-ImportModule 选择开源项目中的 库所在文件夹比如 library文件夹 然后导入. 2 File-Project Sructure 在Modu ...
- ODI 12.1.3创建standalone代理
首先要安装ODI. ODI安装 如果没有安装WLS,则可以选择独立安装,如下图.
- Map的遍历
@Test public void test() { Map<String,String> usersmap = new HashMap<>(); usersmap.put(& ...
- iOS程序进入后台后仍运行定时器NSTimer
由于本应用需要在应用进入后台后还要进行定时的检测功能,因此对于我来说怎样让APP在进入后台后 保持运行状态是比较大的需求.然后在iOS系统中是很难实现的,不管是 通过 音频还是 定位系统,我查找了一些 ...
- jQuery 自定义扩展,与$冲突处理
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- WPF如何实现类似iPhone界面切换的效果(转载)
WPF如何实现类似iPhone界面切换的效果 (version .1) 转自:http://blog.csdn.net/fallincloud/article/details/6968764 在论坛上 ...
- Ubuntu 14.10 下设置静态IP
修改 /etc/network/interfaces 文件 sudo nano /etc/network/interfaces 修改为 # 前面的不变auto eth0 iface eth0 inet ...