ZCMU-1677-小学生小明,圣光会制裁你!!!
来源:互联网 发布:五子棋yixin软件 编辑:程序博客网 时间:2024/05/01 13:34
1677: 小学生小明,圣光会制裁你!!!
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 59 Solved: 22
[Submit][Status][Web Board]
Description
一个数轴上连续摆放着n个矩形,每个矩形的底边占一个单位的长度,第i个矩形的高度为ai.小明想从这n个矩形围成的图形割出一块面积最大的矩形,他已经机智的割出了最大矩形,然而他并不知道矩形面积怎么算,于是他就想问你最大矩形面积怎么算。
Input
多组测试数据。
第一行输入n(0<n<=100000)当n=0时停止输入
接下一行来输入n个数ai,0<=ai<=1000000000
Output
输出最大矩形面积
Sample Input
7 2 1 4 5 1 3 3
4 1000 1000 1000 10000
Sample Output
8
4000
【解析】
这道题的话网上是用栈来做的,自己一看确实这样做比较方便。很多题都是这样..不过自己感觉总是做了忘..做了
忘也希望有点积累吧。这道题我们想啊,怎么样可以凑出一个矩形来,矩形的高度和宽度要怎么选择,大家可以这
么选,一高一矮的矩形在一起肯定是选矮的矩形高度来作为最大面积矩形的高度,还是在代码中解释吧..感觉有点
卡词了...这里需要用到pair,如果之前不理解的可以去了解一下...
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>using namespace std;typedef long long LL;typedef pair<LL,LL> P;#define MAX 100010int main(){ int n,i; LL sum,height,H,W; while(~scanf("%d",&n)) { if(n==0) break; stack<P>a;//模拟栈 sum=0; for(i=0;i<n;i++) { scanf("%lld",&height);//输入高度 LL width=0; while(!a.empty()&&a.top().first>=height)/*如果栈顶的元素高于输入的高度就要开始计算 左边界和右边界也可以就行确定,拿样例1举例子,刚开始输入进栈的时候是(2,1) 之后是输入1,然后2大于1,所以计算下面积,现在的最大面积是2,之后(1,2)进栈 (2,1)已经出栈了,之后再输入4,比栈顶元素高度大所以进栈(4,1),再输入5,5比栈顶 元素大,所以入栈为(5,1)再输入一个1,这个时候比栈顶元素小,所以要计算一下以栈顶 元素的高度为高的矩形面积,宽度以它自身带的宽度,为5所以现在最大面积是5,这个时候(5,1) 出栈,而现在继续比较(4,1)这个时候4大于1,所以宽度变成2了,高度以栈顶元素的高度,最 大面积是8了,这个时候是(1,3)入栈了,表示前面有两个高度比他高的了,在下面计算面积的 时候也就可以计算了。*/ { H=a.top().first; W=a.top().second; a.pop(); width=width+W; sum=max(sum,H*width); } a.push(make_pair(height,width+1)); } W=0; while(!a.empty())/*到了这里,栈里面矩形的高度就是从栈顶到栈底 是逐渐减小的了所以宽度往后可以直接进行相加在样例1中就是计算了(3,2) 还计算了(1,3)这个时候宽度为5了就是2+3*/ { sum=max(sum,a.top().first*(W+a.top().second)); W+=a.top().second; a.pop(); } printf("%lld\n",sum); } return 0;}
0 0
- ZCMU-1677-小学生小明,圣光会制裁你!!!
- 美面魔心伊莉丝:会有蜘蛛之神制裁你
- 小学生
- 非法制裁 豆瓣影评 有些事情,如果发生在别人身上,那是故事;发生在你身上就是事故。
- 几个数学小技巧小学生必知(家长收藏)
- 考研被制裁了
- 小明,你滚出去。。。
- 小明,你为啥不做作业?
- ZCMU 1985:小C的数学问题(线段树+分治)
- zcmu-1657
- zcmu-1685
- ZCMU----1776
- ZCMU----1777
- ZCMU----1778
- ZCMU----1779
- ZCMU-1731
- ZCMU-1658
- ZCMU-1654
- 实现上下文字滚动的效果
- Spring中的byName与byType
- lambda expressions are not supported at this language level intellij
- Android APP 使用Bugly进行APP质量跟踪
- 1.23 第一次题解
- ZCMU-1677-小学生小明,圣光会制裁你!!!
- 反思
- 使用nodejs数据库ORM(Object Relational Mapping)模块
- Linux 使用mysql简单教程
- Hibernate-Usage(basis)(hibernate基本用法)
- Python爬虫/文本处理/科学计算/机器学习——工具包总结
- 南邮离散数学实验三-偏序关系中盖住关系的求取及格论中有补格的判定
- 2016 总结记
- 关于mysql中由于类型转换导致索引无法使用的问题