http://acm.hdu.edu.cn/showproblem.php?pid=5128

题意:给定N个点,选出其中8个点组成两个矩形,使得两个矩形的面积和最大。

思路:找出所有的矩形,然后枚举,挑选求中的两个矩形,判断位置关系,符合条件求出他们的和最大值。坑点:可以内含,内含的时候计算外面的矩形的面积。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int n;
struct node
{
int x,y;
bool operator <(const node &a) const
{
return (x<a.x)||(x==a.x&&y<a.y);
}
} p[],q[],f1[],f2[]; struct node1
{
int num[];
} c[]; int main()
{
//freopen("sss.txt","w",stdout);
while(scanf("%d",&n)!=EOF)
{
if(n==) break; for(int i=; i<=n; i++)
{
scanf("%d %d",&p[i].x,&p[i].y);
}
if(n<)
{
printf("imp\n");
continue;
}
sort(p+,p+n+);
int t1=;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
if(i==j) continue;
for(int a=; a<=n; a++)
{
if(i==a||j==a) continue;
for(int b=; b<=n; b++)
{
if(i==b||j==b||a==b) continue;
q[]=p[i];
q[]=p[j];
q[]=p[a];
q[]=p[b];
sort(q,q+);
if(q[].x!=q[].x||q[].y!=q[].y||q[].x!=q[].x||q[].y!=q[].y)
{
continue;
}
if(q[].x!=q[].x&&q[].y!=q[].y)
{
c[t1].num[]=i;
c[t1].num[]=j;
c[t1].num[]=a;
c[t1++].num[]=b;
}
}
}
}
}
int ans=-;
for(int i=; i<t1; i++)
{
f1[]=p[c[i].num[]];
f1[]=p[c[i].num[]];
f1[]=p[c[i].num[]];
f1[]=p[c[i].num[]];
sort(f1,f1+);
for(int j=; j<t1; j++)
{
if(i==j) continue;
f2[]=p[c[j].num[]];
f2[]=p[c[j].num[]];
f2[]=p[c[j].num[]];
f2[]=p[c[j].num[]];
sort(f2,f2+);
bool flag=false;
for(int ii=; ii<; ii++)
{
for(int jj=; jj<; jj++)
{
if(p[c[i].num[ii]].x==p[c[j].num[jj]].x&&p[c[i].num[ii]].y==p[c[j].num[jj]].y)
{
flag=true;
break;
}
}
if(flag) break;
}
if(flag) continue;
if(f1[].x<=f2[].x&&f2[].x<=f1[].x&&f2[].y<=f1[].y&&f2[].y>=f1[].y&&f2[].x>=f1[].x)
{
continue;
}
if(f1[].x<=f2[].x&&f2[].x<=f1[].x&&f2[].y<=f1[].y&&f2[].y>=f1[].y&&f2[].x>=f1[].x)
{
continue;
}
if(f1[].x>=f2[].x&&f1[].x<=f2[].x&&f1[].y<=f2[].y&&f1[].y>=f2[].y&&f1[].x>=f2[].x)
{
continue;
}
if(f1[].x>=f2[].x&&f1[].x<=f2[].x&&f1[].y<=f2[].y&&f1[].y>=f2[].y&&f1[].x>=f2[].x)
{
continue;
}
if(f1[].x<=f2[].x&&f2[].x<=f1[].x&&f2[].y<=f1[].y&&f2[].y>=f1[].y&&f2[].y<=f1[].y)
{
continue;
}
if(f1[].x<=f2[].x&&f2[].x<=f1[].x&&f2[].y>=f1[].y&&f2[].y<=f1[].y&&f2[].y>=f1[].y)
{
continue;
}
if(f2[].x<=f1[].x&&f1[].x<=f2[].x&&f1[].y<=f2[].y&&f1[].y>=f2[].y&&f1[].y<=f2[].y)
{
continue;
}
if(f2[].x<=f1[].x&&f1[].x<=f2[].x&&f1[].y>=f2[].y&&f1[].y<=f2[].y&&f1[].y>=f2[].y)
{
continue;
}
int s=-;
if(f1[].x>f2[].x&&f1[].x<f2[].x&&f1[].y>f2[].y&&f1[].y<f2[].y)
{
s=(f2[].y-f2[].y)*(f2[].x-f2[].x);
}
else if(f2[].x>f1[].x&&f2[].x<f1[].x&&f2[].y>f1[].y&&f2[].y<f1[].y)
{
s=(f1[].y-f1[].y)*(f1[].x-f1[].x);
}
else
s=(f1[].y-f1[].y)*(f1[].x-f1[].x)+(f2[].y-f2[].y)*(f2[].x-f2[].x);
ans=max(ans,s);
}
}
if(ans==-) printf("imp\n");
else
printf("%d\n",ans);
}
return ;
}

hdu 5128 The E-pang Palace的更多相关文章

  1. HDU 5128 The E-pang Palace(2014广州赛区现场赛B题 计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 解题报告:在一个平面上给出n个点的坐标,用这n个点作为矩形的四个顶点,作两个矩形,要求两个矩形不 ...

  2. hdu - 5128 The E-pang Palace(枚举+计算几何)

    http://acm.hdu.edu.cn/showproblem.php?pid=5128 给出n个点,求n个点组成两个矩形的最大面积. 矩形必须平行x轴,并且不能相交,但是小矩形在大矩形内部是可以 ...

  3. hdu 5129 (枚举) The E-pang Palace

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5128. 给你n个点,问能否组成两个不相交的与坐标轴平行的矩形,能就输出两矩形的面积和,不能就输出一个字符串 ...

  4. HDU 5128.The E-pang Palace-计算几何

    The E-pang Palace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Othe ...

  5. HDU 5218 The E-pang Palace (简单几何—2014广州现场赛)

    题目链接:pid=5128">http://acm.hdu.edu.cn/showproblem.php? pid=5128 题面: The E-pang Palace Time Li ...

  6. HDU - 5128The E-pang Palace+暴力枚举,计算几何

    第一次写计算几何,ac,感动. 不过感觉自己的代码还可以美化一下. 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5128 题意: 在一个坐标系中,有n个 ...

  7. HDU 4435 charge-station () bfs图论问题

    E - charge-station Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  8. HDU 4435 charge-station bfs图论问题

    E - charge-station Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  9. HDU 5025:Saving Tang Monk(BFS + 状压)

    http://acm.hdu.edu.cn/showproblem.php?pid=5025 Saving Tang Monk Problem Description   <Journey to ...

随机推荐

  1. 内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

                  内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel; [root@localhost kern ...

  2. 源码解析之–网络层YTKNetwork

    首先 关于网络层最先可能想到的是AFNetworking,或者Swift中的Alamofire,直接使用起来也特别的简单,但是稍复杂的项目如果直接使用就显得不够用了,首先第三方耦合不说,就光散落在各处 ...

  3. Linux写配置HDF5的python包h5py

    闲言碎语不讲,直接进入正题.Python在科学计算的应用越来越丰度,而hdf(5)数据的应用也非常广泛.python提供了h5py包供开发者处理数据(http://www.h5py.org/).在wi ...

  4. inverse 相关设置

    <set name="students" table = "student" inverse="true"> <!-- 指 ...

  5. CakePHP的blog教程三

    简单的身份验证和授权应用 接着我们blog教程的例子,如果我们想要建立一个根据登录的用户身份来决定其安全访问到正确的urls. 同时我们还有其他的需求: 允许我们的blog有多个作者,每一个作者都可以 ...

  6. android 如何解决模块之间的通讯的耦合问题

    使用EventBus http://wuyexiong.github.io/blog/2013/04/30/android-fragment/ http://yunfeng.sinaapp.com/? ...

  7. mysql - 编码

    show variables like 'character%'; 通过以上命令可以查询编码情况, 不过,在安装的时候,建议选择‘gbk’这类中文编码, 如果选择的是utf8,则在处理的过程中需要进行 ...

  8. iOS 百度地图监听地图状态

    百度地图提供了地图状态的对象BMKMapStatus ///此类表示地图状态信息 @interface BMKMapStatus : NSObject { float _fLevel; // 缩放比例 ...

  9. Codeforces 543D Road Improvement(DP)

    题目链接 Solution 比较明显的树形DP模型. 首先可以先用一次DFS求出以1为根时,sum[i](以i为子树的根时,满足要求的子树的个数). 考虑将根从i变换到它的儿子j时,sum[i]产生的 ...

  10. 记一个问题的AC

    今天突然做一道LCT的染色问题的时候突然想到一个两个月前一道没有AC的题目. 链接 大意是,给一个长度为10^4的序列,最多有255个不同的数字,有最多10^5次方个询问,对于每个询问 l,r 输出[ ...