题目描述

传送门

题解

首先如果想要把圆放进去,每条边往里平移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(半平面交)相关推荐

  1. POJ 3384 Feng Shui(半平面交)

    题意 : 给你一个凸多边形,让你在其中找两个圆,使得圆的覆盖面积最大. 这个题目和 poj 3525 有点类似,那个题目是一个圆,想到两者的联系,可以发现两个圆覆盖面积最大就是重叠面积最小,怎样使得重 ...

  2. CodeForces - Feng Shui(半平面交)

    题目链接:http://codeforces.com/gym/101650/attachments Time Limit: 2000MS Memory Limit: 65536K Descriptio ...

  3. [POJ3384]Feng Shui(半平面交+凸包)

    题目: 我是超链接 题意: 在一个凸多边形中放两个半径固定的圆,要求输出使覆盖面积最大的(可重叠)两个圆圆心 题解: Emmm...套路缩小凸多边形,形成的凸包是圆心可以在的位置,然后暴力找最远点! ...

  4. Feng Shui POJ - 3384 [半平面交]

    Feng Shui POJ - 3384 题意:n个顶点的凸包,放入2个半径为r的圆,可以重叠,要求面积最大,输出2个圆的圆心坐标(保留4位小数) 思路:找出圆心的可行域(内推r,求半平面交),再求核 ...

  5. POJ - 3384 Feng Shui(半平面交)

    链接 Feng Shui 题意 将两个半径为 rrr 的圆放入一个多边形中,两个圆占据最大面积时圆心坐标是多少: 思路 在多边形中放圆,最大圆的圆心一定在多边形内核中: 将多边形的每条边都内推 rrr ...

  6. 半平面交练习(计算几何)

    四:半平面交 Rotating Scoreboard /*Author : lifehappy */ #include <cstdio> #include <cmath> #i ...

  7. UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)

    整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...

  8. POJ 1474 Video Surveillance(半平面交)

    题意:半平面交求多边形内核(我明明及的我之前是会用kuangbin第一份版平面交的,现在怎么就不会用了呢,补第二份代码) 代码: #include<cstdio> #include< ...

  9. LA 2218 (半平面交) Triathlon

    题意: 有n个选手,铁人三项有连续的三段,对于每段场地选手i分别以vi, ui 和 wi匀速通过. 对于每个选手,问能否通过调整每种赛道的长度使得他成为冠军(不能并列). 分析: 粗一看,这不像一道计 ...

  10. POJ3335(半平面交)

    POJ3335 半平面交裸题 //poj3335 #include <cstdio> #include <cmath> #include <algorithm> # ...

最新文章

  1. AAAI 2021: 微调对小样本学习究竟起何作用?搜索或是解决方案
  2. 洛谷P1402 酒店之王(二分图)
  3. python 日志打印
  4. git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
  5. 成功男士的健康心理特征
  6. 汇编语言之第六章包含多个段的程序
  7. javaweb(10) cookiesession
  8. VB 各种进制相互转换大全
  9. 掩膜裁剪tif步骤_使用Arcgis掩膜剪裁工具剪裁全球气候数据为我国范围,并转换为ASC格式...
  10. 【数据结构笔记03】算法实例:最大子列和
  11. python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
  12. mysql 原来用的引擎_MySQL 的常用引擎
  13. 实名寻人搜索引擎app_Lookup:整合多个社交网络的寻人搜索引擎
  14. 经典面试智力题200+题和解答
  15. pygame教程笔记
  16. composer require fxp/composer-asset-plugin 失败
  17. flyingsaucer转换多个html,使用flying-saucer 实现 html转pdf实现input框select,textarea
  18. K8s学习之yum安装
  19. svn提示没有设置冲突_SVN出现叹号文件冲突解决办法
  20. Quartus固化程序到flash芯片

热门文章

  1. 怎么将音频格式转换?通过这几款软件就可以轻松实现转换操作
  2. 【Atlas 200 DK】(四)ACL开发
  3. 愚人节,让生活多些色彩
  4. 牛客练习赛40 A 小D的剧场 (思维dp)
  5. OpenHarmony系统文档贡献的写作规范
  6. 数位 dp 相邻位数字差值的绝对值不能超过 2_数字显示仪FBA7211安徽
  7. Redux Toolkit(RTK)
  8. OSChina 周六乱弹 —— 兔兔你要是同意我就把你俩放一锅
  9. 1.python编程基础概念
  10. 使用udevadm(modinfo)查找linux下设备对应的驱动