问题 H: Planar map

时间限制: 1 Sec  内存限制: 128 MB
提交: 24  解决: 22
[提交][状态][讨论版]

题目描述

Tigher has work for a long time in a famous company.One day she is given a planar map(look at

the following) and a point.The planar map can be regarded as a polygon.The planar map has n

positions,which are the n vertexes in the polygon.

Actually the point replace the position of a supermarket.The supermarket has a range of its

effect,which show as a circle.The company wants to know the maximum radius of the

circle.Unfortunately,Tigher decides to see movie with her BF this evening.So she give the project

to the ipqhjjybj(so poor!).However,ipqhjjybj want to have dinner with his new friends(do you

remember the “hengheng eat noodles” last time),so he throw the project to you.Can you solve it?

输入

An interger CASE ,which means the total case num.

For every case, the first line is an interger means n.(1<=n<=6)

Then will be n lines (x , y) which indicates the n points' position.

The n+2 line will be the coordinate of the supermarket,and we promise that this point must be in the internal of the planar map.

And this n points will form n lines , which is (n1, n2) (n2 , n3) (n3 ,n4) (n4, n5)...(nn,n1)

输出

It will give just an real number . (Preserve 3 decimal places)

样例输入

4
4
0 0
2 0
2 2
0 2
1 1
1
1 1
1 1
6
0 0
2 0
3 1
2 2
1 1
0 2
1 0.5
3
0 0
0 1
1 0
0.5 0.5

样例输出

1.000
0.000
0.500
0.000

提示

对所有线段取点到线段距离最小值

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
struct pnt{
double x,y;
pnt(){x=y=0;}
pnt(double x,double y){this->x=x;this->y=y;}
};
pnt pt[100];
int n;
double caldis(pnt a,pnt b){return sqrt((a.y-b.y)*(a.y-b.y)+(a.x-b.x)*(a.x-b.x));}
double calc(pnt o,pnt a,pnt b){
if(a.y==b.y){
if(o.x<=max(a.x,b.x)&&o.x>=min(a.x,b.x))return fabs(o.y-a.y);
else return min(caldis(o,a),caldis(o,b));
}
else if(a.x==b.x){
if(o.y<=max(a.y,b.y)&&o.y>=min(a.y,b.y))return fabs(o.x-a.x);
else return min(caldis(o,a),caldis(o,b));
}
else{
double k=(b.y-a.y)/(b.x-a.x);
double tx=o.y-a.y+k*a.x+o.x/k;
tx/=(k+1/k);
double ty=k*(tx-a.x)+a.y;
if(tx<=max(a.x,b.x)&&tx>=min(a.x,b.x)&&ty<=max(a.y,b.y)&&ty>=min(a.y,b.y)){
return caldis(o,pnt(tx,ty));
}
else return min(caldis(o,a),caldis(o,b));
}
}
int main(){
int T;
scanf("%d",&T);
for(int ti=0;ti<T;ti++){
scanf("%d",&n);
pnt o;
for(int i=0;i<n;i++){
scanf("%lf%lf",&pt[i].x,&pt[i].y);
}
scanf("%lf%lf",&o.x,&o.y);
double ans=1e19;
for(int i=0;i<n;i++){
ans=min(ans,calc(o,pt[i],pt[(i+1)%n]));
}
printf("%.3f\n",ans);
}
return 0;
}

  

NEU 1496 Planar map 计算几何,点到线段距离 难度:0的更多相关文章

  1. POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

    首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...

  2. POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    A Round Peg in a Ground Hole Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4438   Acc ...

  3. POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...

  4. Peter and Snow Blower CodeForces - 613A (点到线段距离)

    大意: 给定多边形, 给定点$P$, 求一个以$P$为圆心的最小的圆环包含整个多边形. #include <iostream> #include <cmath> #define ...

  5. HDU 6697 Closest Pair of Segments(线段距离)

    首先最容易想到的就是N2暴力枚举所有线段去找最小值,但是这样会做了许多无用功.我们可以先对线段排序,使得线段最左侧的端点按照x轴y轴排序,然后我们可以限定在这个线段的矩形框内的所有线段才有可能产生最小 ...

  6. (点到线段的最短距离)51nod1298 圆与三角形

    1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0).   收起 ...

  7. poj1584(判断凸包+求点到线段的距离)

    题目链接:https://vjudge.net/problem/POJ-1584 题意:首先要判断凸包,然后判断圆是否在多边形中. 思路: 判断凸包利用叉积,判断圆在多边形首先要判断圆心是否在多边形中 ...

  8. UVa 11168 (凸包+点到直线距离) Airport

    题意: 平面上有n个点,求一条直线使得所有点都在直线的同一侧.并求这些点到直线的距离之和的最小值. 分析: 只要直线不穿过凸包,就满足第一个条件.要使距离和最小,那直线一定在凸包的边上.所以求出凸包以 ...

  9. 诡异之--map clear 之后可能导致size != 0的操作

    map<char, int>mp; charMp[; charMp['b'] ++; cout<<charMp['a']<<endl; cout<<ch ...

随机推荐

  1. CIFAR和SVHN在各CNN论文中的结果

    CIFAR和SVHN结果 加粗表示原论文中该网络的最优结果. 可以看出DenseNet-BC优于ResNeXt优于DenseNet优于WRN优于FractalNet优于ResNetv2优于ResNet ...

  2. https://www.cnblogs.com/skywang12345/category/455711.html

    https://www.cnblogs.com/skywang12345/category/455711.html

  3. 防止常见XSS 过滤 SQL注入 JAVA过滤器filter

    XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往W ...

  4. python3_Logging模块详解

    python的logging模块提供了通用的日志系统,可以方便第三方模块或应用使用. 简单使用 import logging # logging.config.fileConfig("./l ...

  5. 《Java入门第三季》第二章 认识 Java 中的字符串

    什么是 Java 中的字符串.1.在Java的世界里,字符串被作为String类型的对象处理. 2.通用的初始化的方式:String s = new String("i love you & ...

  6. Thinkphp5.0实战开发一------命名空间详解

    序言 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,使用ThinkPHP框架可以极大简化我们的开发过程,节省时间.这个专题我将记录自己学习使用ThinkPHP5.0的进行实战开发 ...

  7. Web服务器对比介绍

    1.Apache Apache是非常强大的老牌Web服务器,具有模块化结构,拥有众多非常成熟稳定的模块,目前仍是使用非常广泛的服务器,但它是基于多进程HTTPServer,需要对每个用户请求创建一个子 ...

  8. 20145302张薇《Java程序设计》实验一报告

    20145302 <Java程序设计>实验一:Java开发环境的熟悉 实验内容 使用dos命令行编译.运行简单的Java程序: 使用IDEA编辑.编译.运行.调试Java程序. 1.命令行 ...

  9. 什么是“QQ登录OAuth2.0”

    1. 什么是“QQ登录OAuth2.0 OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他 ...

  10. oracle的 分表 详解 -----表分区

    此文从以下几个方面来整理关于分区表的概念及操作:         1.表空间及分区表的概念         2.表分区的具体作用         3.表分区的优缺点         4.表分区的几种类 ...