hdu 6219 Empty Convex Polygons (凸包)
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include <set>
#include <queue>
#define ll long long
#define ld long double
#define lson l,m,rt<<1
#define pi acos(-1)
#define rson m+1,r,rt<<1|1
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
#define mem(x) memset(x,0,sizeof(x))
#define eps 3e-11
using namespace std;
const int maxn = ;
const ll inf = 1e9;
const ll mod = ;
ll read() {
ll x=,f=;
char ch=getchar();
while(!(ch>=''&&ch<='')) {
if(ch=='-')f=-;
ch=getchar();
};
while(ch>=''&&ch<='') {
x=x*+(ch-'');
ch=getchar();
};
return x*f;
}
int sgn(double x){
if(fabs(x)<eps)return ;
if(x<)return -;
return ;
}
struct Point{
int id;
double x,y;
Point(){
}
Point(double _x,double _y){
x=_x;
y=_y;
}
friend bool operator < (Point a,Point b) {
return sgn(a.x-b.x)==?sgn(a.y-b.y)<:a.x<b.x;
}
double operator ^ (const Point &b) const{
return x*b.y - y*b.x;
}
bool operator == (const Point &b) const{
return sgn(x-b.x)==&&sgn(y-b.y)==;
}
Point operator - (const Point &b) const{
return Point(x-b.x,y-b.y);
}
double distance(Point b){
return sqrt((x-b.x)*(x-b.x) + (y-b.y)*(y-b.y));
}
};
struct polygon{
int n;
Point p[maxn];
struct cmp{
Point p;
cmp(const Point &p0) {p=p0;}
bool operator()(const Point &aa,const Point &bb){
Point a=aa,b=bb;
int d=sgn((a-p)^(b-p));
if(d==){
return sgn(a.distance(p) - b.distance(p)) < ;
}
return d>;
}
};
void norm(Point t){
sort(p+,p++n,cmp(t));
}
int relationpoint(Point q){
int cnt = ;
fo(i,,n-){
int j = (i+)%n;
int k = sgn((q-p[j])^(p[i]-p[j]));
int u = sgn(p[i].y-q.y);
int v = sgn(p[j].y-q.y);
if(k>&&u<&&v>=)cnt++;
if(k<&&v<&&u>=)cnt--;
if(k==)return ;
}
return cnt != ;
}
}ps,pts,rec;
int n;
bool ok[maxn][maxn][maxn];
double dp[maxn][maxn],ans;
void gao(int st){
memset(dp,,sizeof(dp));
int m = n-st+;
pts.n=m;
fo(i,,m){
pts.p[i] = ps.p[st+i-];
}
pts.norm(pts.p[]);
fo(i,,m){
fo(j,i+,m){
if(!ok[pts.p[].id][pts.p[i].id][pts.p[j].id]){
dp[i][j] = ;
}else{
bool flag = true;
fo(k,,i-){
if(sgn((pts.p[k]-pts.p[])^(pts.p[i]-pts.p[]))==){
flag=false;
break;
}
}
if(flag)fo(k,,i-){
if(sgn((pts.p[i]-pts.p[k])^(pts.p[j]-pts.p[i]))>=){ dp[i][j] = max(dp[i][j],dp[k][i]);
}
}
dp[i][j] += ((pts.p[i]-pts.p[]) ^ (pts.p[j]-pts.p[]))/2.0;
}
ans=max(ans,dp[i][j]);
}
}
}
int main() {
int T=read();
while(T--){
ans=;
n=ps.n=read();
fo(i,,n){
ps.p[i] = Point(read(),read());
}
sort(ps.p+,ps.p++n);
fo(i,,n) ps.p[i].id=i;
fo(i,,n){
fo(j,i+,n){
fo(k,j+,n){
rec.n=;
rec.p[]=ps.p[i];rec.p[]=ps.p[j];rec.p[]=ps.p[k];
ok[k][i][j]=ok[k][j][i]=ok[j][i][k]=ok[j][k][i]=ok[i][k][j]=ok[i][j][k]=true;
if(sgn((rec.p[]-rec.p[])^(rec.p[]-rec.p[]))==)continue;
fo(t,,n){
if(t==i||t==j||t==k)continue;
if(rec.relationpoint(ps.p[t])==){
ok[k][i][j]=ok[k][j][i]=ok[j][i][k]=ok[j][k][i]=ok[i][k][j]=ok[i][j][k]=false;
break;
}
}
}
}
}
fo(i,,n){
gao(i);
}
printf("%.1f\n",ans);
}
return ;
}
hdu 6219 Empty Convex Polygons (凸包)的更多相关文章
- 2017ACM/ICPC亚洲区沈阳站 C Hdu-6219 Empty Convex Polygons 计算几何 最大空凸包
题面 题意:给你一堆点,求一个最大面积的空凸包,里面没有点. 题解:红书板子,照抄完事,因为题目给的都是整点,所以最后答案一定是.5或者.0结尾,不用对答案多做处理 #include<bits/ ...
- hdu6219 Empty Convex Polygons (最大空凸包板子
https://vjudge.net/contest/324256#problem/L 题意:给一堆点,求最大空凸包面积. 思路:枚举凸包左下角点O,dp找出以这个点为起始位置能构成的最大空凸包面积, ...
- HDU 6617 Enveloping Convex(凸包+半平面交+二分)
首先对于这m个点维护出一个凸包M,那么问题就变成了判断凸包P进行放大缩小能不能包含凸包M.(凸包P可以进行中心对称变换再进行放大缩小,见题意) 如何判断合适的相似比呢,我们可以用二分去放大缩小凸包P的 ...
- HDU 1392 Surround the Trees(凸包*计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1392 这里介绍一种求凸包的算法:Graham.(相对于其它人的解释可能会有一些出入,但大体都属于这个算 ...
- HDU 4946 Area of Mushroom 凸包
链接:pid=4946">http://acm.hdu.edu.cn/showproblem.php?pid=4946 题意:有n个人.在位置(xi,yi),速度是vi,假设对于某个点 ...
- HDU 4946 Area of Mushroom 凸包 第八次多校
题目链接:hdu 4946 题意:一大神有N个学生,各个都是小神,大神有个二次元空间,每一个小神都有一个初始坐标,如今大神把这些空间分给徒弟们,规则是假设这个地方有一个人比谁都先到这,那么这个地方就是 ...
- Opencv Convex Hull (凸包)
#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...
- HDU - 1392 Surround the Trees (凸包)
Surround the Trees:http://acm.hdu.edu.cn/showproblem.php?pid=1392 题意: 在给定点中找到凸包,计算这个凸包的周长. 思路: 这道题找出 ...
- HDU 1392 Surround the Trees (凸包周长)
题目链接:HDU 1392 Problem Description There are a lot of trees in an area. A peasant wants to buy a rope ...
随机推荐
- webpack搭建前端开发环境
webpack的版本已经是来到了4.0,口号是无配置就可以使用webpack,当然是使用一些基本的功能 1.安装以下webpack的一些必须npm包 npm install webpack npm i ...
- MySQL 7种 JOIN连表方法
规定:左边的圆代表表 a,右边的代表 b. JOIN 关键字可以在两表之间选中任意部分.] 通过以下代码制造一些数据: delimiter // drop procedure if exists pr ...
- 关于jQuery获取不到动态添加的元素节点的问题
遇到问题: 当我获取 $("#art-list")页面元素后去在后面追加标签的时候(append),在下面用 $(selector) 获取刚刚添加的标签,发现怎么都获取不到. 问题 ...
- Docker下载镜像出现failed to register layer: symlink....问题
在用Docker下载RabbitMQ的时候出现如下问题 个人解决方案:重启Docker. 若重启还是无法解决问题,可以先关闭Docker systemctl stop docker 然后把已下载的相关 ...
- [转载]Ethernet,Half-Duplex/Full-Duplex,CSMA
原文地址:Ethernet,Half-Duplex/Full-Duplex,CSMA/CD,Auto-Negotiation作者:心田麦浪 CSMA/CD(Carrier Sense Multiple ...
- 云主机使用ansible出现秘钥认证问题
使用ansible的时候,出现如下秘钥失效的问题: root@jumpserver ftp]# ansible web -m ping The authenticity of host 'web-00 ...
- RSA前端加密
昨天做了登陆模块,接触了md5&RSA加密.有点意思,talk is cheap,show me the code! 前端加密 为什么要加密 前端加密的方式 后台如何解密 1 为什么要加密? ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(11)|Structs结构体]
[易学易懂系列|rustlang语言|零基础|快速入门|(11)] 有意思的基础知识 Structs 我们今天来看看数据结构:structs. 简单来说,structs,就是用来封装相关数据的一种数据 ...
- ubuntu 配置smb后无法访问
配置如下 [/gscloud] path = /gscloud browseable = yes writable = yes guest ok = yes read only = no create ...
- Okhttp拦截器统一异常处理并多次读取response.body().string()
参考:https://blog.csdn.net/a624806998/article/details/73863606 引言: 写这篇文章,因为在自己编写实现Http日志拦截器的时候,在拦截器中使用 ...