zoukankan      html  css  js  c++  java
  • 计算最大矩形面积,POJ(2082)

    题目链接:http://poj.org/problem?id=2082

    把矩形按照高度一次递增的循序排列,当违反这一规则的时候,更新ans,用新的data替换之前的矩形。然后最后扫一遍。

    #include <iostream>
    #include <stack>
    #include <cstdio>
    
    using namespace std;
    
    struct rec {
        int w;      ///
        int h;      ///
    } data;
    
    int main() {
        int n;
        while(scanf("%d",&n),n!=-1) {
            int ans=0;
            int totalw=0;   ///总宽
            int curarea=0;  ///当前面积
            stack<rec> s;   ///定义一个长方形的栈
            int lasth=0;    ///上一次进栈的矩形的高度
            for(int i=0; i<n; i++) {
                scanf("%d%d",&data.w,&data.h);
                if(data.h>=lasth) {
                    s.push(data);       
                } else {
                    ///更新ans
                    totalw=0;
                    curarea=0;
                    while(!s.empty()&&s.top().h>data.h) {
                        totalw+=s.top().w;
                        curarea=totalw*s.top().h;
                        if(curarea>ans)
                            ans=curarea;
                        s.pop();    ///抛掉,最后用新的data代替
                    }
                    totalw+=data.w;
                    data.w=totalw;
                    s.push(data);
                }
                lasth=data.h;
            }
    
            totalw=0;   ///总宽度
            curarea=0;  ///当前面积
            while(!s.empty()) {
                totalw+=s.top().w;
                curarea=totalw*s.top().h;
                if(curarea>ans)
                    ans=curarea;
                s.pop();
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Mac pycharm专业版安装以及破解方法
    Django 错误之 No module named ‘MySQLdb’
    archery部署
    MySQL监控内容
    mac安装神器brew
    4. 寻找两个有序数组的中位数
    7.整数反转
    2.两数相加
    1. 两数之和
    141. 环形链表
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5483542.html
Copyright © 2011-2022 走看看