坑爹的题,,就是先向内推进r,然后半平面交得出圆心范围。

然后旋转卡壳求最远点对

这道题首先样例给的就不对,不知道什么情况

然后一直WA,后来看了discuss,试了下这组数据:

4 1
0 0
0 2
2 2
2 0

发现n个端点两两距离都一样时会出错,然后改了改代码,就A了

总结就是一直WA的时候,一定要学会看discuss

#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
const double eps=1e-5;
struct Point {double x,y;Point (){}Point (double xx,double yy) {x=xx;y=yy;}Point operator -(const Point b)const {return Point(x-b.x,y-b.y);}double operator ^(const Point b)const {return x*b.y-y*b.x;}
};
struct Line {Point s,e;double angle;Line(){}Line(Point ss,Point ee) {s=ss;e=ee;}Point operator &(const Line b)const {Point res=s;double t=((s-b.e)^(b.s-b.e))/((s-e)^(b.s-b.e));res.x+=(e.x-s.x)*t;res.y+=(e.y-s.y)*t;return res;}
};
int n,m;
int r;
Point p[105];
Line l[105],dq[105];
int cmp(Line a,Line b) {if (fabs(a.angle-b.angle)<eps) return ((a.e-a.s)^(b.s-a.s))>eps;else return a.angle<b.angle;
}
double dist(Point a,Point b) {return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
}
void HPI(){sort(l,l+n,cmp);int ln;for(int i=1,j=0;i<n;i++){if (l[i].angle-l[j].angle>eps) l[++j]=l[i];ln=j+1;}dq[0]=l[0];dq[1]=l[1];int bot=0,top=1;//for(int i=0;i<ln;i++) printf("%f %f\n",l[i].s.x,l[i].s.y);for(int i=2;i<ln;i++) {while (bot<top && ((l[i].e-l[i].s)^((dq[top]&dq[top-1])-l[i].s))>eps) top--;while (bot<top && ((l[i].e-l[i].s)^((dq[bot]&dq[bot+1])-l[i].s))>eps) bot++;dq[++top]=l[i];}while (bot<top && ((dq[bot].e-dq[bot].s)^((dq[top]&dq[top-1])-dq[bot].s))>eps) top--;while (bot<top && ((dq[top].e-dq[top].s)^((dq[bot]&dq[bot+1])-dq[top].s))>eps) bot++;//for(int i=bot;i<top;i++) printf("%lf %lf\n",dq[i].s.x,dq[i].s.y);if (top<=bot+1) return;dq[++top]=dq[bot];m=0;for(int i=bot;i<top;i++){p[m++]=dq[i]&dq[i+1];//printf("%lf %lf\n",p[m-1].x,p[m-1].y);}//方便处理p[m]=p[0];
}
int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endif // ONLINE_JUDGEwhile(scanf("%d%d",&n,&r)!=EOF) {for(int i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);p[n]=p[0];for(int i=0;i<n;i++) {//向内推进rdouble dx,dy,len;Point ta,tb;ta=p[i];tb=p[i+1];dx=p[i+1].y-p[i].y;dy=p[i].x-p[i+1].x;len=sqrt(dx*dx+dy*dy);ta.x=p[i].x+dx*r/len;ta.y=p[i].y+dy*r/len;tb.x=p[i+1].x+dx*r/len;tb.y=p[i+1].y+dy*r/len;l[i].s=ta;l[i].e=tb;l[i].angle=atan2(tb.y-ta.y,tb.x-ta.x);//printf("%f %f\n",l[i].s.x,l[i].s.y);}HPI();//旋转卡壳求最远点对,点逆时针排列double ans=0;Point a,b;//printf("%d\n",m);for(int i=0,j=1;i<m;i++) {while(((p[i+1]-p[i])^(p[j]-p[i]))<((p[i+1]-p[i])^(p[j+1]-p[i]))) j=(j+1)%m;//printf("%f \n",((p[i+1]-p[i])^(p[j]-p[i])));//printf("%f %f\n",p[i].x,p[i].y);if (dist(p[i],p[j])>=ans) {a=p[i];b=p[j];ans=dist(p[i],p[j]);}if (dist(p[i+1],p[j+1])>=ans) {a=p[i+1];b=p[j+1];ans=dist(p[i+1],p[j+1]);}}printf("%.4f %.4f %.4f %.4f\n",a.x,a.y,b.x,b.y);}return 0;
}

POJ 3384 Feng Shui相关推荐

  1. poj 3384 Feng Shui (Half Plane Intersection)

    3384 -- Feng Shui 构造半平面交,然后求凸包上最远点对. 这题的题意是给出一个凸多边形区域,要求在其中放置两个半径为r的圆(不能超出凸多边形区域),要求求出两个圆心,使得多边形中没有被 ...

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

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

  3. poj 3384 Feng Shui 半平面交

    http://poj.org/problem?id=3384 给定一个多边形,在多边形内放有两个相同的圆,使两个圆尽可能多的覆盖多边形.输出最终两个圆心的位置. 最优的放置方法必定是圆内切于两条边,那 ...

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

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

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

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

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

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

  7. Feng Shui POJ - 3384

    题目链接:https://cn.vjudge.net/problem/POJ-3384 #include<cstdio> #include<cstring> #include& ...

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

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

  9. Using the five elements of fashion colors to create the best feng shui in auspicious Home

    Romania, just a legend Licheng Peng Galaxy SOHO opening-day sales 46 Pan Shiyi Students start the On ...

最新文章

  1. 如何写新的C++ OP
  2. 细粒度图像分类_支付宝AI大幅提升细粒度图像分类识别精度:一眼看穿万物细微差异...
  3. 《推荐系统实践》样章:如何利用用户标签数据
  4. python html压缩包,用python制作一个简单html压缩
  5. Spring Cloud 微服务的那点事
  6. 数据库大并发操作要考虑死锁和锁的性能问题
  7. Linux停服务器命令,使用linux的shutdown命令关闭服务器
  8. java中的前加加 和 后加加
  9. 为啥春节抢红包总不是运气王?看完微信抢红包算法你就明白了
  10. docker部署分布式应用_Docker服务,堆栈和分布式应用程序捆绑
  11. 使用Struts标签的基本配置
  12. cmak(kafka Manager) 编译教程
  13. 禁用Ctrl+alt+del
  14. sqlserver2014数据导出与导入
  15. loj #6570. 毛毛虫计数
  16. (2013.05.05)N枚硬币找1枚假币
  17. 【WLAN】【测试】WLAN相关测试软件一览
  18. 计算机合成图像的技术可应用于,计算机系统概论第五章测验与答案.doc
  19. 生鲜超市 学习进阶第三天 xadmin的后台管理
  20. 查看 找回 SecureCRT的密码

热门文章

  1. 什么是存储过程,存储过程的优点。及使用。
  2. 逃不开的安迪-比尔定律,在智能机器人时代该如何破解?
  3. 8086CPU指令系统 串操作指令和处理机控制指令
  4. golang 字符串拼接性能比较
  5. 史上最强大的procreate笔刷,调色卡,字体分享站点大推荐
  6. DNS错误是什么意思?
  7. 【leetcode 971】 翻转二叉树以匹配先序遍历
  8. 扎心!为何HR看了你的简历却不通知面试?
  9. 做SEO为什么有的网站收录很难做?
  10. 宅男福利!我用Python做了一个B站跳舞的小姐姐,满屏的美腿!