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 ...
随机推荐
- 初学jQuery之jQuery虚假购物车-------与真实数据无关
初学者用jquery来写仿真的购物车,确实有点恶心,那我们今天就把这万恶的购物车剖析一下,来看看到底有什么难的. 购物车的效果图 那我们先从复选框开始吧,废话不多说,上代码!! 带有序号的,都是一些分 ...
- SQLServer2008 使用BCP导入导出表数据
--先开启cmdshell EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'xp_c ...
- CSS3之 transform和animation区别
CSS3 有3种和动画相关的属性:transform, transition, animation.其中 transform 描述了元素静态样式.而transition 和 animation 却都能 ...
- 20小时掌握网站开发(免费精品htmlcss视频教程)
自己最近研发了一套新的htmlcss教程,并进行了授课实施,视频教程百度云下载链接如下: 视频及案例源码下载地址 本套教程视频需要安装屏幕录像专家软件才能观看,屏幕录像专家下载地址如下: 屏幕录像专家 ...
- 2B课程笔记分享_StudyJams_2017
课程2B-创建交互式应用(下) 概述 课程2B的内容主要包括:使用变量来更新欲显示在屏幕上的内容,为按钮添加事件响应(联系XML属性与Java方法)逻辑等. 后续的课程会逐步深入地讲解使用Java开发 ...
- Java内存机制,内存地址
问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); // ...
- Visual Studio Code 插件推荐
Path Intellisense - 路径补全 HTML Snippets - HTML 标记增强 Markdown+Math - Markdown 增强(数学表达式) vscode-icons - ...
- 【sqli-labs】 less28a GET- Blind based -All you Union&Select Belong to us -String -Single quote-parenthesis(GET型基于盲注的去除了Union和Select的单引号带括号字符型注入)
和less28没什么区别,直接上个payload吧 http://192.168.136.128/sqli-labs-master/Less-28a/?id=0')%a0uNion%a0sElect% ...
- html 报告页面样式
修改了下HTML页面样式 页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 通过JDBC取Oracle数据库的时间字段时,时间丢失,只剩日期
通过JDBC连接Oracle数据库,在查询的时候发现时间字段取出来值后只剩下了日期,时间消失了.查资料发现跟Oracle jdbc驱动版本有关,这里先贴出解决方案: 修改数据库的连接方式: try { ...