关闭

pku 2082 Terrible Sets

712人阅读 评论(0) 收藏 举报

这道题感觉就是在描述几何问题 (largest rectangle ),当然是用代数方式。

第一个想到的方法是DP,O(n^2),同枚举没什么区别。

再一个容易想到的办法,按高度,最高的有机会“自成一家”,otherwise, the taller part is droped, the remaining is added to taller one on it's sides, and so one. Time complexity: O(nlgn)[sort]+O(n)[merge] = O(nlgn). max N is 50000, worth a try.

The O(n) algorithm given by report: from left to right calculate the area of one higher than both sides, then merge with higher side, and go on.

#include <iostream>
#define N 50001
using namespace std;

struct Rect
{
	int w,h;
};
Rect rect[N];
int top; // use it as a stack

int main()
{
	int n;
	__int64 s;
	Rect tmp,tmp2;
	while (scanf("%d",&n)!=EOF)
	{
		if (n==-1)	break;
		rect[0].h = rect[0].w = 0;
		s = 0; 
		top =1;
		for (int i=1; i<=n; ++i)
		{
			scanf("%d%d",&tmp.w,&tmp.h);

			while (tmp.h < rect[top-1].h)
			{
				if (rect[top-1].h*rect[top-1].w>s)
                    s = rect[top-1].h*rect[top-1].w;

				if (rect[top-2].h > tmp.h)
				{
					rect[top-2].w +=rect[top-1].w;
					--top;
				}
				else
				{
					tmp.w += rect[top-1].w;
					--top;
					break;
				}
			}
			rect[top] = tmp;
			++top;
		}
		while (top>=2)
		{
			if (rect[top-1].h*rect[top-1].w>s)
                    s = rect[top-1].h*rect[top-1].w;
			rect[top-2].w += rect[top-1].w;
			--top;
		}
		printf("%I64d/n",s);
	}
}

 

http://acm.pku.edu.cn/JudgeOnline/problem?id=1755 这道题用另一方式描述了一道计算几何问题。

总的说来是图形化的描述。

做这题时想到了LRJ黑书上的打造王冠那题。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

POJ-2081 Terrible Sets(暴力,单调栈)

POJ-2081 Terrible Sets(暴力,单调栈)
  • Dacc123
  • Dacc123
  • 2016-01-07 19:58
  • 182

POJ 2082 Terrible Sets(单调栈) 【最大矩形面积类模板】

Let N be the set of all natural numbers {0 , 1 , 2 , . . . }, and R be the set of all real numbers. ...
  • qq_38538733
  • qq_38538733
  • 2017-07-10 14:50
  • 70

POJ 2082 Terrible Sets 51nod 1102 面积最大的矩形 《题意好难懂---<贪心+单调栈>》

Terrible Sets Time Limit: 1000MS   Memory Limit: 30000KB   64bit IO Format: %lld & %llu Sub...
  • leibniz_zhang
  • leibniz_zhang
  • 2016-07-25 17:55
  • 357

FZU 2082 过路费 (树链剖分)

树链剖分裸题。。。不多说。。 代码如下:#include #include #include #include #include #include #include #include ...
  • u013013910
  • u013013910
  • 2015-05-04 22:34
  • 981

CF 251D Two Sets 异或高斯消元找最优解

CF251D Two Sets 异或高斯消元找最优解
  • YxuanwKeith
  • YxuanwKeith
  • 2016-04-08 20:46
  • 722

两道普通母函数(HDU1028、HDU2082)

这两天发现了几道母函数模板题 HDU1028 题目链接:题目在这里 题目大意:对于一个正整数,有多少种拆分方法 代码: #include #include using namespace std;...
  • nixinyis
  • nixinyis
  • 2016-07-26 16:14
  • 192

FZU 2082 过路费(树链剖分)

很基础的树链剖分练习+树状数组 #include #include #include #include #include #include #include #include #includ...
  • Forever_wjs
  • Forever_wjs
  • 2016-07-18 10:03
  • 243

FZU 2082 树链剖分

点击打开链接 题意:中文 思路:最基础的树链剖分,区间求和以及单点更新,结果要用long long 就没什么了#include #include #include #include #in...
  • Dan__ge
  • Dan__ge
  • 2016-07-12 10:52
  • 810

杭电ACM hdu 2082 找单词 解题报告(母函数)

Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26。那么,对于给定的字母...
  • u012077163
  • u012077163
  • 2013-11-30 17:06
  • 2286

poj2082栈的简单应用

/* *poj2082 *题目描述的真复杂 ,其实题意很简单 *就是输入每个长方形的宽度和高度 可以切割的最大的长方形的面积 *解题思路就是维护一个高度递增的一个栈, *输入的高度大于等于栈顶元素...
  • HE19930303
  • HE19930303
  • 2015-09-16 16:09
  • 170
    个人资料
    • 访问:42780次
    • 积分:834
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:6篇
    • 译文:0篇
    • 评论:4条
    文章分类