Feng Shui POJ
来源:互联网 发布:最精准的足彩数据分析 编辑:程序博客网 时间:2024/05/17 04:39
题目链接:https://cn.vjudge.net/problem/POJ-3384
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include <iostream>#define eps 1e-10using namespace std;struct point{ double x,y;}points[110],p[110],q[110];int n,curcnt,cCnt,m;void guizheng(){ for(int i=1;i<=n;++i){ q[i]=points[n-i+1]; } for(int i=1;i<=n;++i){ points[i]=q[i]; }}double juli(point p1, point p2){ return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);}void getline(point p1,point p2,double &a,double &b,double &c){ a=p2.y-p1.y; b=p1.x-p2.x; c=p2.x*p1.y-p2.y*p1.x;}void init(){ for(int i=1;i<=n;++i){ p[i]=points[i]; } p[n+1]=p[1];p[0]=p[n]; cCnt=n;}point getinter(point p1,point p2,double a,double b,double c){ double u=fabs(a*p1.x+b*p1.y+c); double v=fabs(a*p2.x+b*p2.y+c); point temp; temp.x=(v*p1.x+u*p2.x)/(u+v); temp.y=(v*p1.y+u*p2.y)/(u+v); return temp;}void cut(double a,double b,double c){ curcnt=0; for(int i=1;i<=cCnt;++i){ if(a*p[i].x+b*p[i].y+c>=0)q[++curcnt]=p[i]; else{ if(a*p[i-1].x+b*p[i-1].y+c>0){ q[++curcnt]=getinter(p[i],p[i-1],a,b,c); } if(a*p[i+1].x+b*p[i+1].y+c>0) q[++curcnt]=getinter(p[i],p[i+1],a,b,c); } } for(int i=1;i<=curcnt;++i){ p[i]=q[i]; } p[curcnt+1]=q[1]; p[0]=p[curcnt]; cCnt=curcnt;}void solve(){ points[n+1]=points[1]; init(); for(int i=1;i<=n;++i){ point ta,tb,tc; tc.x=points[i+1].y-points[i].y; tc.y=points[i].x-points[i+1].x; double k=m/sqrt(tc.x*tc.x+tc.y*tc.y); tc.x*=k;tc.y*=k; ta.x=points[i].x+tc.x; ta.y=points[i].y+tc.y; tb.x=points[i+1].x+tc.x; tb.y=points[i+1].y+tc.y; double a,b,c; getline(ta,tb,a,b,c); cut(a,b,c); } double max=-1; int r1,r2; for(int i=1;i<=cCnt;++i){ for(int j=i+1;j<=cCnt;++j){ double temp= juli(p[i], p[j]); if(temp>max){ max=temp; r1=i;r2=j; } } } printf("%.6lf %.6lf %.6lf %.6lf\n",p[r1].x,p[r1].y,p[r2].x,p[r2].y);}int main(){ int i,j,k; while(~scanf("%d%d",&n,&m)){ for(i=1;i<=n;++i){ scanf("%lf%lf",&points[i].x,&points[i].y); } solve(); } return 0;}
阅读全文
0 0
- poj 3384 Feng Shui
- POJ 3384 Feng Shui
- POJ 3384 Feng Shui
- Feng Shui POJ
- POJ 3384 Feng Shui(半平面交)
- POJ 3384 Feng Shui 半平面交
- POJ 3384 Feng Shui 半平面交
- POJ 3384 Feng Shui(半平面交)
- 【半平面交】 POJ 3384 Feng Shui
- POJ 3384 Feng Shui 半平面交
- [半平面交] poj 3384 Feng Shui
- POJ 3384 Feng Shui(半平面交)
- Poj 3384 Feng Shui (半平面求交应用)
- poj 3384 Feng Shui(半平面交)
- POJ 3384 Feng Shui 凸包直径 + 半平面交
- poj 3384 Feng Shui(半平面交推进多边形)
- POJ 3384 || Feng Shui (半平面交内推R
- poj 3384 Feng Shui (半平面交)
- 20170927_二分查找
- 欢迎使用CSDN-markdown编辑器
- Container With Most Water
- 【转】在Android中使用adb命令时关于权限方面的一些总结
- 【51Nod1689】逛街
- Feng Shui POJ
- java---TestThread(3)
- 加帕里的聚会 树链剖分 + 线段树(区间加 、区间赋值)
- react native学习笔记11——react-native-swiper轮播图
- qbxt集训cogs2682. 膜拜
- 增强版插入排序--二分的结合
- 括号序列配对问题
- Java for Acm
- Java面向对象编程(OOP)