算法题:水洼有多少(C++)
来源:互联网 发布:约战竞技场出招优化 编辑:程序博客网 时间:2024/05/02 20:20
题目:
输入一串数字,表示这一段空间的各个点的高低
然后,算出来,在这样的情况下,下雨后(保证雨很大,就是说,如果能形成积水,那就一定会形成)
如:
0 1 2 3
是不会形成积水的;
1 0 2
这样是可以形成积水的,量是1;
(想象一个柱状图)
我们会输出积水的量 ,而这个就是要算出来的东西
给一组测试数据
4
10
0 1 2 1 0 1 3 2 0 1
3
10 1 9
4
4 3 1 2
输出的结果:
5
8
1
代码如下:
#include <iostream>#include <algorithm>using namespace std;int main(){ int time; cin>>time; while (time--){ int n, t; cin >> n; int *a = new int [n]; for (int i = 0; i < n; ++i) { cin >> a[i]; } int sum = 0; bool first = true; for (int i = 0; i < n;) {//find hill if (a[i] == 0 || i == n){ i++; } else if (first) {//This one is a hill first = false; int j = i+1, temp = 0; for (; j < n-1; ++j) { if (a[j] > a[j -1] && a[j] > a[j + 1]) {// find another hill break; } temp += a[j]; } if (j == n - 1 && a[i + 1] >= a[j]){ temp -= a[i + 1]; sum += (min(a[i + 1], a[j]) * (j - i - 2) - temp); } else { sum += (min(a[i], a[j]) * (j - i - 1) - temp); } i = j; //refresh the hill } else { int j = i+1, temp = 0; for (; j < n-1; ++j) { if (a[j] > a[j -1] && a[j] > a[j + 1]) {// find another hill break; } temp += a[j]; } if (j == n - 1 && a[i + 1] >= a[j]){ temp -= a[i+1]; sum += (min(a[i + 1], a[j]) * (j - i - 2) - temp); } else { sum += (min(a[i], a[j]) * (j - i - 1) - temp); } i = j; //refresh the hill } } cout << sum << endl; delete a; } }
阅读全文
1 0
- 算法题:水洼有多少(C++)
- 编程算法 - 水洼的数量 代码(C)
- Lake Counting 水洼算法
- 水洼
- (算法题)5的987次方有多少位
- 百度有多少种算法?
- ANSI C(标准C)究竟有多少个头文件?
- 每日一道算法题:1024!末尾有多少个0?
- 两个日期间有多少天c#(sql)
- 每日一题之找出水洼个数
- java 程序题 递归算法 判断一个整数化成二进制之后有多少个1 (两种思路)
- 有多少人在使用C++/CLR?
- C语言函数 某月有多少天
- 单子(Monad)有多少?
- 算法与数据结构——算法题 8:0到9999这1万个数中有多少个数字7(腾讯面试) ? 待解决
- 一个算法题:10个队分成3组,问有多少种分法
- 面试算法题:爬楼梯,N级楼梯有多少种走法?
- 试题:基本算法题之【计算N!后面有多少个0】
- QT 获取系统屏幕分辨率
- 苹果的哲学
- UDP的Scoket
- SpringMVC后台接受前台传值的方法
- 全球著名大学计算机视觉相关实验室
- 算法题:水洼有多少(C++)
- http协议状态码
- centos6.5以下升级mysql
- 中元日芽香还是选择毕业了
- 【Android】网络编程----浏览器
- chrome+cVim手指不要再爽
- Struts2 多文件打包下载
- POJ-1990 MooFest (树状数组 入门题)
- 彻底搞懂 PHP 变量结构体,多数文章观点不准确