HDU 5218 The E-pang Palace (简单几何—2014广州现场赛)
题目链接: pid=5128">http://acm.hdu.edu.cn/showproblem.php? pid=5128
题面:
The E-pang Palace
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)
Total Submission(s): 1646 Accepted Submission(s): 1226
completed. Building the great wall, E-pang Palace and Qin Shihuang's tomb cost so much labor and human lives that people rose to fight against Qin Shihuang's regime.
Xiang Yu and Liu Bang were two rebel leaders at that time. Liu Bang captured Xianyang -- the capital of Qin. Xiang Yu was very angry about this, and he commanded his army to march to Xianyang. Xiang Yu was the bravest and the strongest warrior at that time,
and his army was much more than Liu Bang's. So Liu Bang was frighten and retreated from Xianyang, leaving all treasures in the grand E-pang Palace untouched. When Xiang Yu took Xianyang, he burned E-pang Palce. The fire lasted for more than three months, renouncing
the end of Qin dynasty.
Several years later, Liu Bang defeated Xiangyu and became the first emperor of Han dynasty. He went back to E-pang Palace but saw only some pillars left. Zhang Liang and Xiao He were Liu Bang's two most important ministers, so Liu Bang wanted to give them some
awards. Liu Bang told them: "You guys can make two rectangular fences in E-pang Palace, then the land inside the fences will belongs to you. But the corners of the rectangles must be the pillars left on the ground, and two fences can't cross or touch each
other."
To simplify the problem, E-pang Palace can be consider as a plane, and pillars can be considered as points on the plane. The fences you make are rectangles, and you MUST make two rectangles. Please note that the rectangles you make must be parallel to the coordinate
axes.
The figures below shows 3 situations which are not qualified(Thick dots stands for pillars):

Zhang Liang and Xiao He wanted the total area of their land in E-pang Palace to be maximum. Please bring your computer and go back to Han dynasty to help them so that you may change the history.
For each test case:
The first line is an integer N, meaning that there are N pillars left in E-pang Palace(4 <=N <= 30).
Then N lines follow. Each line contains two integers x and y (0 <= x,y <= 200), indicating a pillar's coordinate. No two pillars has the same coordinate.
The input ends by N = 0.
8
0 0
1 0
0 1
1 1
0 2
1 2
0 3
1 3
8
0 0
2 0
0 2
2 2
1 2
3 2
1 3
3 3
0
2
imp
给定一些点。要以这些点为四个顶点构造矩形,求构造两个矩形不相交(相交关系见图示)。且面积最大。
不可能则输出imp。
解题:
比較暴力就好,有点类似上周BC的一道题的做法,直接枚举两个对角线点,然后看另外两个点是否存在,存在的话。继续和还有一个矩形推断相对位置关系。
可是要小心一个矩形包括在另外一个矩形中,也是能够的,面积仅仅算大的那个。具体看代码。
代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;
struct point
{
int x,y;
}store[35];
bool map[210][210];
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b? a:b;
}
int judge(int a,int b,int c,int d)
{
int res;
//下面分别为两个矩形左下和右上位置坐标
int lx1,lx2,ly1,ly2,rx1,rx2,ry1,ry2;
lx1=min(store[a].x,store[b].x);
ly1=min(store[a].y,store[b].y);
lx2=min(store[c].x,store[d].x);
ly2=min(store[c].y,store[d].y);
rx1=max(store[a].x,store[b].x);
ry1=max(store[a].y,store[b].y);
rx2=max(store[c].x,store[d].x);
ry2=max(store[c].y,store[d].y);
//是同一个矩形
if(lx1==lx2&&ly1==ly2&&rx1==rx2&&ry1==ry2)
return 0;
//一个全然在另外一个上面或者右边,那么就是两个矩形加
if((ry1<ly2)||(ry2<ly1)||(lx1>rx2)||(lx2>rx1))
{
res=(rx1-lx1)*(ry1-ly1)+(rx2-lx2)*(ry2-ly2);
return res;
}
//假设一个全然包括在另外一个里面
if(lx2<lx1&&ly2<ly1&&rx1<rx2&&ry1<ry2)
{
res=(rx2-lx2)*(ry2-ly2);
return res;
}
//假设一个全然包括在另外一个里面
if(lx1<lx2&&ly1<ly2&&rx2<rx1&&ry2<ry1)
{
res=(rx1-lx1)*(ry1-ly1);
return res;
}
//否则即为相交
else
return 0;
}
int main()
{
int n,a,b,c,d,e,f,g,h;
int area;
while(scanf("%d",&n)&&n)
{
area=0;
memset(map,0,sizeof(map));
//读入
for(int i=0;i<n;i++)
{
scanf("%d%d",&store[i].x,&store[i].y);
//将地图上对应的点标记为有
map[store[i].x][store[i].y]=1;
}
//没8个点,就肯定不行
if(n<8)
{
printf("imp\n");
continue;
}
else
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
//由于枚举的是对角线。所以在一条边上就跳过
if((store[i].x==store[j].x)||(store[i].y==store[j].y))
continue;
else
{
a=store[i].x;
b=store[i].y;
c=store[j].x;
d=store[j].y;
//假设除了对角线之外,另外两点存在
if(map[c][b]&&map[a][d])
{
for(int k=0;k<n-1;k++)
{
//不与原来两点反复
if((k!=i)&&(k!=j))
{
for(int m=k+1;m<n;m++)
{
//不与原来两点反复
if((m!=i)&&(m!=j))
{
//仅仅枚举对角线
if((store[k].x==store[m].x)||(store[k].y==store[m].y))
continue;
else
{
e=store[k].x;
f=store[k].y;
g=store[m].x;
h=store[m].y;
//假设除了对角线之外。另外两点存在,这时才推断两个矩形关系
if(map[g][f]&&map[e][h])
{
area=max(area,judge(i,j,k,m));
}
}
}
}
}
}
}
else
continue;
}
}
}
if(area==0)
printf("imp\n");
else
printf("%d\n",area);
}
}
return 0;
}
HDU 5218 The E-pang Palace (简单几何—2014广州现场赛)的更多相关文章
- hdu 5137 去掉一个点 使得最短路最大(2014广州现场赛 K题)
题意:从2~n-1这几个点中任意去掉一个点,使得从1到n的最短路径最大,如果任意去掉一个点1~n无通路输出Inf. Sample Input4 51 2 31 3 71 4 502 3 43 4 23 ...
- hdu 5131 (2014广州现场赛 E题)
题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个 ...
- HDU 4815 Little Tiger vs. Deep Monkey(2013长春现场赛C题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815 简单的DP题. #include <stdio.h> #include <st ...
- hdu 5071(2014鞍山现场赛B题,大模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...
- hdu 5078 2014鞍山现场赛 水题
http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...
- HDU 4793 Collision (解二元一次方程) -2013 ICPC长沙赛区现场赛
题目链接 题目大意 :有一个圆硬币半径为r,初始位置为x,y,速度矢量为vx,vy,有一个圆形区域(圆心在原点)半径为R,还有一个圆盘(圆心在原点)半径为Rm (Rm < R),圆盘固定不动,硬 ...
- hdu 5078(2014鞍山现场赛 I题)
数据 表示每次到达某个位置的坐标和时间 计算出每对相邻点之间转移的速度(两点间距离距离/相隔时间) 输出最大值 Sample Input252 1 9//t x y3 7 25 9 06 6 37 6 ...
- hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)
两个圆环的内外径相同 给出内外径 和 两个圆心 求两个圆环相交的面积 画下图可以知道 就是两个大圆交-2*小圆与大圆交+2小圆交 Sample Input22 30 00 02 30 05 0 Sam ...
- hdu 5122 (2014北京现场赛 K题)
把一个序列按从小到大排序 要执行多少次操作 只需要从右往左统计,并且不断更新最小值,若当前数为最小值,则将最小值更新为当前数,否则sum+1 Sample Input255 4 3 2 155 1 2 ...
随机推荐
- wap 5.23 网测几道题目
1. n个犯人,m个省份, 如果相邻的2个犯人来自同一省份,则是不安全的,求不安全的个数. 正难则反,用全部的个数减去非法的个数,就是最后的答案. m^n - m * (m - 1) ^ (n - 1 ...
- PHP序列化 反序列化
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...
- poj3669 广搜
//好久没刷题了,生疏了. 题意分析: 题意理解为在一个二维的正向坐标轴上,一个点(流星)连同它的上下左右的四个点会在某一个时刻被破坏.一个人在原点,问她到达安全区的最小时间是多少. 代码思路: 从原 ...
- H265
H265 h265 一.名词 CTU: 编码树单元 CU: 编码单元 PU: 以CU为根,对CU进行划分,一个预测单元PU包含一个亮度预测块PB和两个色度预测块PB. TU: 以CU为根,变换单元T ...
- 启动MyEclipse 出现java.lang.RuntimeException: No application id has been found 解决办法
咋一看,太熟悉了,就去eclipse\links 目录下,发现指定的MyEclipse的路径不对. 突然想起来了,MyEclipse是换地了. MyEclipse里面内置的eclipse找不到MyEc ...
- logging模块-logging.basicConfig、logger.setLevel、handler.setLevel优先级
logging.basicConfig < handler.setLevel < logger.setLevel 1.脚本中没有配置logger.setLevel会使用handler.se ...
- jdk?jre?
很多人都搞不懂什么是jdk,什么是jre,只知道电脑安装了这两个就能开发和运行java程序,这里我简单讲讲什么是jdk,什么是jre. jdk,即Java Development Kit,故名思意就是 ...
- 记一次惊心的网站 TCP 队列问题排查经历
https://blog.csdn.net/chenlycly/article/details/80868990 http://www.mytju.com/classcode/news_readnew ...
- Struts 获取表单数据总结
第一种:定义属性值,通过Setters方法获取 /** * 属性驱动:没有实体 * 要求:成员变量必须要有set方法,set后面的名称必须和表单中参数的属性名称一致(首字母大写) * 执行过程:通过成 ...
- SQL Server 通过备份文件初始化复制 – 听风吹雨
一.背景 MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件 在Slave进行还原:这样做的好处是可以更加快速的 ...