判断矩形能包围点集的最小面积:凸包

 #include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <sstream>
#include <algorithm>
#define Max 2147483647
#define INF 0x7fffffff
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define repu(i, a, b) for(int i = (a); i < (b); i++)
const double PI=-acos(-1.0);
#define eps 1e-8
#define N 50010
using namespace std;
struct Point
{
double x,y;
Point() {}
Point(double x0,double y0):x(x0),y(y0) {}
};
Point p[N];
int con[N];
int cn;
int n;
struct Line
{
Point a,b;
Line() {}
Line(Point a0,Point b0):a(a0),b(b0) {}
};
double Xmult(Point o,Point a,Point b)
{
return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);
}
double Dmult(Point o,Point a,Point b)
{
return (a.x-o.x)*(b.x-o.x)+(a.y-o.y)*(b.y-o.y);
}
int Sig(double a)
{
return a<-eps?-:a>eps;
}
double Dis(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int cmp(Point a,Point b)
{
double d=Xmult(p[],a,b);
if(d>)
return ;
if(d== && Dis(p[],a)<Dis(p[],b))
return ;
return ;
}
double min(double a,double b)
{
return a<b?a:b;
}
void Graham()
{
int i,ind=;
for(i=; i<n; i++)
if(p[ind].y>p[i].y || (p[ind].y==p[i].y) && p[ind].x>p[i].x)
ind=i;
swap(p[ind],p[]);
sort(p+,p+n,cmp);
con[]=;
con[]=;
cn=;
for(i=; i<n; i++)
{
while(cn> && Sig(Xmult(p[con[cn-]],p[con[cn]],p[i]))<=)
cn--;
con[++cn]=i;
}
int tmp=cn;
for(i=n-; i>=; i--)
{
while(cn>tmp && Sig(Xmult(p[con[cn-]],p[con[cn]],p[i]))<=)
cn--;
con[++cn]=i;
}
}
double Solve()
{
int t,r,l;
double ans=;
t=r=;
if(cn<)
return ;
for(int i=; i<cn; i++)
{
while(Sig( Xmult(p[con[i]],p[con[i+]],p[con[t+]])-
Xmult(p[con[i]],p[con[i+]],p[con[t]]) )>)
t=(t+)%cn;
while(Sig( Dmult(p[con[i]],p[con[i+]],p[con[r+]])-
Dmult(p[con[i]],p[con[i+]],p[con[r]]) )>)
r=(r+)%cn;
if(!i) l=r;
while(Sig( Dmult(p[con[i]],p[con[i+]],p[con[l+]])-
Dmult(p[con[i]],p[con[i+]],p[con[l]]) )<=)
l=(l+)%cn;
double d=Dis(p[con[i]],p[con[i+]]);
double tmp=Xmult(p[con[i]],p[con[i+]],p[con[t]])*
( Dmult(p[con[i]],p[con[i+]],p[con[r]])-
Dmult(p[con[i]],p[con[i+]],p[con[l]]) )/d/d;
ans=min(ans,tmp);
}
return ans;
}
int main()
{
int i,T;
scanf("%d",&T);
repu(kase,,T+)
{
scanf("%d",&n);
n *= ;
for(i=; i<n; i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
Graham();
printf("Case #%d:\n%.0lf\n",kase,Solve());
}
return ;
}

UVA 10173 (几何凸包)的更多相关文章

  1. 此坑待填 离散化思想和凸包 UVA - 10173 Smallest Bounding Rectangle

    Smallest Bounding Rectangle Given the Cartesian coordinates of n(>0)2-dimensional points, write a ...

  2. uva 10065 (凸包+求面积)

    链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...

  3. HDU 4946 Area of Mushroom (几何凸包)

    题目链接 题意:给定n个人,每个人有一个速度v方向任意.如果平面中存在一个点只有某个人到达的时间最短(即没有人比这个人到的时间更短或相同),那么我们定义这个店归这个人管辖,现在问这些人中哪些人的管辖范 ...

  4. 简单几何(凸包+多边形面积) POJ 3348 Cows

    题目传送门 题意:求凸包 + (int)求面积 / 50 /************************************************ * Author :Running_Tim ...

  5. 简单几何(凸包+枚举) POJ 1873 The Fortified Forest

    题目传送门 题意:砍掉一些树,用它们做成篱笆把剩余的树围起来,问最小价值 分析:数据量不大,考虑状态压缩暴力枚举,求凸包以及计算凸包长度.虽说是水题,毕竟是final,自己状压的最大情况写错了,而且忘 ...

  6. 简单几何(凸包) POJ 1696 Space Ant

    题目传送门 题意:一个蚂蚁一直往左边走,问最多能走多少步,且输出路径 分析:就是凸包的变形题,凸包性质,所有点都能走.从左下角开始走,不停排序.有点纠结,自己的凸包不能AC.待理解透凸包再来写.. 好 ...

  7. 简单几何(凸包) POJ 1113 Wall

    题目传送门 题意:求最短路线,使得线上任意一点离城堡至少L距离 分析:先求凸包,答案 = 凸包的长度 + 以L为半径的圆的周长 /*********************************** ...

  8. 简单几何(凸包) POJ 2187 Beauty Contest

    题目传送门 题意:求两点的距离平方的最大值 分析:凸包模板题 /************************************************ * Author :Running_T ...

  9. UVa 10652 (简单凸包) Board Wrapping

    题意: 有n块互不重叠的矩形木板,用尽量小的凸多边形将它们包起来,并输出并输出木板总面积占凸多边形面积的百分比. 分析: 几乎是凸包和多边形面积的裸题. 注意:最后输出的百分号前面有个空格,第一次交P ...

随机推荐

  1. ASP.NET Core + EF6

    微软推出了全新的 .Net Core,于是我就想着在目前接手的项目中使用这项新技术.但是因为预算的原因,我们所用的数据库是 MySql .但是最新的 EF Core 并不支持 MySql ,所以目前我 ...

  2. 仿souhu页面设计

    仿搜狐页面设计 Html页面设计代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...

  3. Windows server 2012 AD DS 搭建步骤

    服务器版本:Windows server 2012 1.  配置网络,由于本机会搭建DNS服务器,因此首选DNS服务器设置为127.0.0.1 2.  打开服务器管理器 3.  点击添加角色和功能,下 ...

  4. Bootstrap_标签

    一.标签 在一些Web页面中常常会添加一个标签用来告诉用户一些额外的信息,比如说在导航上添加了一个新导航项,可能就会加一个“new”标签,来告诉用户. 那么在Bootstrap框架中特意将这样的效果提 ...

  5. O(1) Check Power of 2 - LintCode

    examination questions Using O(1) time to check whether an integer n is a power of 2. Example For n=4 ...

  6. SpringBoot集成jsp(附源码)+遇到的坑

    1.大体步骤 (1)       创建Maven web project: (2)       在pom.xml文件添加依赖: (3)       配置application.properties支持 ...

  7. socket详解(一)《转》

    在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器 ...

  8. 解决sublime text3中的输入法不根随光标问题

    日本的一位大神开发了一款插件用在Sublime Text上,以缓解输入法不跟随光标移动的问题.当然这个问题并没有完美的解决,据一些用户的反映,输入过程中还是偶尔会发生输入法不跟随光标移动的问题,不过确 ...

  9. Android Studio UML 插件 PlantUML 使用语法

    活动标签(activity label)以冒号开始,以分号结束. 文本格式支持creole wiki语法. 活动默认安装它们定义的顺序就行连接. @startuml :Hello world; :Th ...

  10. 转帖-[教程] Win7精简教程(简易中度)2016年8月-0day

    [教程] Win7精简教程(简易中度)2016年8月 0day 发表于 2016-8-19 16:08:41  https://www.itsk.com/thread-370260-1-1.html ...