[POJ3384]Feng Shui(半平面交)
题目描述
传送门
题解
首先如果想要把圆放进去,每条边往里平移r了之后一定存在至少一个凸壳
凸壳上的点就是圆心的可行解
要求圆心距最大,就是找凸壳上距离最远的点
这两个点一定在凸壳的顶点处,暴力枚举就行了
注意特判凸壳中只有一个点的情况
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 10005const double pi=acos(-1.0);
const double inf=1e9;
const double eps=1e-12;
int dcmp(double x)
{if (x<=eps&&x>=-eps) return 0;return (x>0)?1:-1;
}
struct Vector
{double x,y;Vector(double X=0,double Y=0){x=X,y=Y;}
};
typedef Vector Point;
Vector operator + (Vector a,Vector b) {return Vector(a.x+b.x,a.y+b.y);}
Vector operator - (Vector a,Vector b) {return Vector(a.x-b.x,a.y-b.y);}
Vector operator * (Vector a,double p) {return Vector(a.x*p,a.y*p);}int n,cnt,ncnt,ansi,ansj;
double x,y,r,ans;
Point p[N],poly[N],npoly[N];double Dot(Vector a,Vector b)
{return a.x*b.x+a.y*b.y;
}
double Cross(Vector a,Vector b)
{return a.x*b.y-a.y*b.x;
}
double Len(Vector a)
{return sqrt(Dot(a,a));
}
Vector rotate(Vector a,double rad)
{return Vector(a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad));
}
bool insLS(Point A,Point B,Point C,Point D)
{Vector v=B-A,w=C-A,u=D-A;return dcmp(Cross(v,w))!=dcmp(Cross(v,u));
}
Point GLI(Point P,Vector v,Point Q,Vector w)
{Vector u=P-Q;double t=Cross(w,u)/Cross(v,w);return P+v*t;
}
void init()
{cnt=0;poly[++cnt]=Point(inf,inf);poly[++cnt]=Point(inf,-inf);poly[++cnt]=Point(-inf,-inf);poly[++cnt]=Point(-inf,inf);
}
void halfp(Point A,Point B)
{ncnt=0;Point C,D;for (int i=1;i<=cnt;++i){C=poly[i%cnt+1];D=poly[(i+1)%cnt+1];if (dcmp(Cross(B-A,C-A))<=0)npoly[++ncnt]=C;if (insLS(A,B,C,D))npoly[++ncnt]=GLI(A,B-A,C,D-C);}cnt=ncnt;for (int i=1;i<=cnt;++i)poly[i]=npoly[i];
}
int main()
{scanf("%d%lf",&n,&r);for (int i=1;i<=n;++i){scanf("%lf%lf",&x,&y);p[i]=Point(x,y);}init();for (int i=1;i<=n;++i){Point A=p[i%n+1];Point B=p[(i+1)%n+1];Vector v=B-A;Vector w=rotate(v,-pi/2.0);w=w*(r/Len(w));Point C=A+w;Point D=C+v;halfp(C,D);}ansi=ansj=1;for (int i=1;i<=cnt;++i)for (int j=i+1;j<=cnt;++j){double dis=Len(poly[i]-poly[j]);if (dcmp(dis-ans)>0){ans=dis;ansi=i,ansj=j;}}printf("%.4lf %.4lf %.4lf %.4lf\n",poly[ansi].x,poly[ansi].y,poly[ansj].x,poly[ansj].y);
}
[POJ3384]Feng Shui(半平面交)相关推荐
- POJ 3384 Feng Shui(半平面交)
题意 : 给你一个凸多边形,让你在其中找两个圆,使得圆的覆盖面积最大. 这个题目和 poj 3525 有点类似,那个题目是一个圆,想到两者的联系,可以发现两个圆覆盖面积最大就是重叠面积最小,怎样使得重 ...
- CodeForces - Feng Shui(半平面交)
题目链接:http://codeforces.com/gym/101650/attachments Time Limit: 2000MS Memory Limit: 65536K Descriptio ...
- [POJ3384]Feng Shui(半平面交+凸包)
题目: 我是超链接 题意: 在一个凸多边形中放两个半径固定的圆,要求输出使覆盖面积最大的(可重叠)两个圆圆心 题解: Emmm...套路缩小凸多边形,形成的凸包是圆心可以在的位置,然后暴力找最远点! ...
- Feng Shui POJ - 3384 [半平面交]
Feng Shui POJ - 3384 题意:n个顶点的凸包,放入2个半径为r的圆,可以重叠,要求面积最大,输出2个圆的圆心坐标(保留4位小数) 思路:找出圆心的可行域(内推r,求半平面交),再求核 ...
- POJ - 3384 Feng Shui(半平面交)
链接 Feng Shui 题意 将两个半径为 rrr 的圆放入一个多边形中,两个圆占据最大面积时圆心坐标是多少: 思路 在多边形中放圆,最大圆的圆心一定在多边形内核中: 将多边形的每条边都内推 rrr ...
- 半平面交练习(计算几何)
四:半平面交 Rotating Scoreboard /*Author : lifehappy */ #include <cstdio> #include <cmath> #i ...
- UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)
整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...
- POJ 1474 Video Surveillance(半平面交)
题意:半平面交求多边形内核(我明明及的我之前是会用kuangbin第一份版平面交的,现在怎么就不会用了呢,补第二份代码) 代码: #include<cstdio> #include< ...
- LA 2218 (半平面交) Triathlon
题意: 有n个选手,铁人三项有连续的三段,对于每段场地选手i分别以vi, ui 和 wi匀速通过. 对于每个选手,问能否通过调整每种赛道的长度使得他成为冠军(不能并列). 分析: 粗一看,这不像一道计 ...
- POJ3335(半平面交)
POJ3335 半平面交裸题 //poj3335 #include <cstdio> #include <cmath> #include <algorithm> # ...
最新文章
- AAAI 2021: 微调对小样本学习究竟起何作用?搜索或是解决方案
- 洛谷P1402 酒店之王(二分图)
- python 日志打印
- git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
- 成功男士的健康心理特征
- 汇编语言之第六章包含多个段的程序
- javaweb(10) cookiesession
- VB 各种进制相互转换大全
- 掩膜裁剪tif步骤_使用Arcgis掩膜剪裁工具剪裁全球气候数据为我国范围,并转换为ASC格式...
- 【数据结构笔记03】算法实例:最大子列和
- python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
- mysql 原来用的引擎_MySQL 的常用引擎
- 实名寻人搜索引擎app_Lookup:整合多个社交网络的寻人搜索引擎
- 经典面试智力题200+题和解答
- pygame教程笔记
- composer require fxp/composer-asset-plugin 失败
- flyingsaucer转换多个html,使用flying-saucer 实现 html转pdf实现input框select,textarea
- K8s学习之yum安装
- svn提示没有设置冲突_SVN出现叹号文件冲突解决办法
- Quartus固化程序到flash芯片