dut1305 台阶
Description
如上图所示的一个台阶他的积水量是4 + 2 + 4 + 3 + 4 = 17.
给你一个长度是n的台阶。告诉你每个台阶的高度,求积水量是多少?
Input
多组输入数据:
每组数据第一行一个整数n(1 <= n <= 100 000).
第二行n个整数,其中ai是第i个数。(0 <= ai <= 10 000)
Output
每组数据输出一行表示台阶的积水量。
Sample Input
Sample Output
想我大二的时候就左思右想不会做这道题。。。大三了觉得再做不出来太丢人。。。于是苦思冥想。。。。
开始的思路总是想从左到右扫一遍。。考虑各种情况总是有漏洞。。比如 5 2 3 1 2这种。。
卡在一个思路好久,奈何找不到题解。。。提问没人解答。。。
后来想到排序,然后从高到矮依次处理。如果该数在已处理的区间内那么就不用再考虑的,否则把该数位置到区间的中间填满,然后扩大已处理的区间。。
还是水题啊。。不过终于做出来好开心 ^_^
#include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; typedef long long ll; const int N = 100005; struct node {
int val;
int pos;
bool operator < (node a) const
{
return val > a.val;
}
} a[N]; int b[N]; int main()
{
int n;
while (cin >> n)
{
for (int i = 0; i < n; ++i)
{
cin >> a[i].val;
a[i].pos = i;
b[i] = a[i].val;
}
sort(a, a + n);
int l, r;
l = r = a[0].pos;
ll ans = 0;
for (int i = 1; i < n; ++i)
{
//printf("%d %d %d\n", i, l, r);
//printf("%d %d\n", a[i].pos, a[i].val);
if (a[i].pos < r && a[i].pos > l) continue;
if (a[i].pos < l)
{
for (int j = a[i].pos + 1; j < l; ++j)
{
ans += a[i].val - b[j];
//cout << ans << endl;
}
l = a[i].pos;
}
else if (a[i].pos > r)
{
for (int j = r + 1; j < a[i].pos; ++j)
ans += a[i].val - b[j];
r = a[i].pos;
}
}
cout << ans << endl;
}
return 0;
}
dut1305 台阶的更多相关文章
- jQuery插件开发精品教程,让你的jQuery提升一个台阶
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- JS面试题-算法台阶问题
有100格台阶,可以跨1步可以跨2步,那么一个有多少种走法: 今天电话面试.遇到一道算法问题,然后瞬间一脸懵逼: 然后机智的我,自作聪明的想到如果一个人每次都走1步,那么最多步,每次走2步最少步:然后 ...
- 青蛙跳100级台阶算法,完整可运行,php版本
/* 算法题目 * 2016年4月11日16:11:08 * 一只青蛙,一次可以跳1步,或者2步,或者3步,现在要跳100级台阶,请问青蛙有多少种上100级台阶的跳法 * 1步的有$n 2步的有$m ...
- Swift解算法——台阶问题
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级. 求总共有多少总跳法,并分析算法的时间复杂度. 首先对题目进行分析: 台阶一共有n级 因此当n = 1时——只有一种跳法 当 ...
- 剑指Offer 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 其实就是斐波那契数列问题. 假设f(n)是n个台阶跳的次数. f(1) = ...
- 剑指Offer 跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2; AC代码 ...
- 转:jQuery插件开发精品教程,让你的jQuery提升一个台阶
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- 剑指offer——变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳 ...
- IT公司100题-27-跳台阶问题
问题描述: 一个台阶总共有n阶,一次可以跳1级或者2级.求总共有多少种跳法. 分析: 用f(n)表示n阶台阶总共有多少种跳法.n阶台阶,第一可以选择跳1阶或者2阶,则f(n) = f(n-1) + ...
随机推荐
- LocalContainerEntityManagerFactoryBean
http://doc.okbase.net/liuyitian/archive/109276.html
- to debug asp.net mvc4
Go to Tools -> Options -> Debugger -> General Uncheck the option Enable Just My Code (Manag ...
- 安装cocoaPods遇到的坑
第一个坑 更换ruby源后,安装cocoaPods是出现以下错误:activesupport requires Ruby version >= 2.2.2 Ruby version >= ...
- delphi xe5 android iny绿色版+最新SDK/NDK安装方法
转自: http://bbs.2ccc.com/topic.asp?topicid=438595 首先感谢iny的绿色版,因为我的精简Win7 32位安装原版镜像4.63G过程正常,但是编译出错,后来 ...
- jQuery滑动导航菜单
js: $(function(){ $("ul.sub").parent().append("<span></span>"); $(&q ...
- [DP] The 0-1 knapsack problem
Give a dynamic-programming solution to the 0-1 knapsack problem that runs in O(nW) time, where n is ...
- ireport 在 AIX Linux websphere下的字体安装
首先,ireport在linux下有些时候是正常的,而有些时候却不正常,只要是汉字就出不来的情况我今天是遇到了. ireport在Linux下不显示中文汉字的解决方法: 将字体文件(后缀名必须是ttf ...
- 通过 SignalR 类库,实现 ASP.NET MVC 的实时通信
在本文中,您将学到在现有 ASP.NET MVC 框架的 CRUD 项目中,如何使用 SignalR 类库,显示来自数据库的实时更新.在这一主题中,我们将重点放在在现有 ASP.NET MVC 框架的 ...
- 练习PYTHON之EPOLL
哟,哟,哟,,SELECT,EPOLL之类的,终于出现了. 不能太急了,要缓一缓,缓一缓,再缓一缓~~~~~~~~~ http://scotdoyle.com/python-epoll-howto.h ...
- Java装饰设计模式的例子
这里给出一个顾客购买咖啡的例子.其中咖啡可以加冰(2元),加巧克力(4元). 下面是面向对象中装饰模式的解决方案. /** * Created with IntelliJ IDEA. * User: ...