CodeForces

来源:互联网 发布:2000年流行网络歌曲 编辑:程序博客网 时间:2024/06/05 09:44


You are given a convex polygon P with n distinct verticesp1, p2, ..., pn. Vertexpi has coordinates(xi, yi) in the 2D plane. These vertices are listed in clockwise order.

You can choose a real number D and move each vertex of the polygon a distance of at most D from their original positions.

Find the maximum value of D such that no matter how you move the vertices, the polygon does not intersect itself and stays convex.

Input

The first line has one integer n (4 ≤ n ≤ 1 000) — the number of vertices.

The next n lines contain the coordinates of the vertices. Linei contains two integersxi andyi ( - 109 ≤ xi, yi ≤ 109) — the coordinates of the i-th vertex. These points are guaranteed to be given in clockwise order, and will form a strictly convex polygon (in particular, no three consecutive points lie on the same straight line).

Output

Print one real number D, which is the maximum real number such that no matter how you move the vertices, the polygon stays convex.

Your answer will be considered correct if its absolute or relative error does not exceed10 - 6.

Namely, let's assume that your answer is a and the answer of the jury is b. The checker program will consider your answer correct if.

Example
Input
40 00 11 11 0
Output
0.3535533906
Input
65 010 012 -410 -85 -83 -4
Output
1.0000000000
Note

Here is a picture of the first sample

Here is an example of making the polygon non-convex.

This is not an optimal solution, since the maximum distance we moved one point is ≈ 0.4242640687, whereas we can make it non-convex by only moving each point a distance of at most ≈ 0.3535533906


题意:按顺时针给出n个点,n<=1e3,组成的凸多边形,求出最大的D,使得任意点按任意方向移动不超过D后,n个点依然组成凸多边形.

本题的关键是用到凸多边形的每个角都小于180度的性质。

图像转载:http://blog.csdn.net/jeremy1149/article/details/70231644


答案为min(每个点的到直线的距离的一半)

#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<vector>#include<stack>#include<queue>#include<algorithm>#include<sstream>#define inf 0x3f3f3f3f#define ll long longusing namespace std;struct point{    double x;    double y;    point(){}    point(double x,double y):x(x),y(y) {}}q[1010];typedef point Vector;Vector operator - (point a,point b){    return Vector(a.x-b.x,a.y-b.y);}double Length(Vector a){    return sqrt(a.x*a.x+a.y*a.y);}double cross(Vector a,Vector b){    return a.x*b.y-a.y*b.x;}double DistanceToLine(point p,point a,point b){    Vector v1=b-a;    Vector v2=p-a;    return fabs(cross(v1,v2))/Length(v1);}int main(){    int n;    while(cin>>n)    {        for(int i=1;i<=n;i++)            scanf("%lf%lf",&q[i].x,&q[i].y);        double minx=1e18;        for(int i=1;i<=n;i++)        {            if(i==1)                minx=min(minx,DistanceToLine(q[i],q[n],q[i+1]));            else if(i==n)                minx=min(minx,DistanceToLine(q[i],q[i-1],q[1]));            else                minx=min(minx,DistanceToLine(q[i],q[i-1],q[i+1]));        }        printf("%0.10f\n",minx/2);    }    return 0;}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老师跟家长吵架了怎么办 孩子在幼儿园被老师孤立怎么办 学生在幼儿园被老师欺负怎么办 小孩脚痒怎么办小窍门 小孩肚子病怎么办天天说 幼儿园幼儿信息表填错了怎么办 水浒传书孩子说看不懂怎么办 孩子丢了书老师怎么办 小朋友做错事不承认老师怎么办 教师被学生骂后怎么办 嘴吧里面长泡怎么办 有个小孩怕下雨怎么办? 幼儿的家长打我怎么办 老师打学生被家长起诉怎么办 家长在学校打了老师怎么办 老师打小孩我们家长怎么办呢? 孩子长手、腿毛怎么办 腿毛又黑又多怎么办 孩子怕老师说他怎么办 被老师骂到厌学怎么办 孩子对写作业一点也不主动怎么办 高三孩子太贪玩怎么办 玩心重的孩子该怎么办 儿子读大学不愿意读书怎么办 孩子打架全班都讨厌怎么办 孩子不爱学习怎么办 二年级 二年级孩子不爱学习总爱玩怎么办 初三孩子学习不积极怎么办 孩子学习不积极应该怎么办 小孩子贪玩不写作业怎么办 老公懒不帮忙分担家务怎么办 宝宝不喜欢早教课程单一怎么办 孩子上课不听话顶撞老师怎么办 孩子不喜欢吃水果蔬菜怎么办 中学生顶撞家长顶撞老师怎么办 .cn孩子初中上课不专心怎么办 娃儿小学二年级做不来怎么办 孩子不愿意看书沉迷电子产品怎么办 孩子自律和自控性差怎么办 婴儿7个月不喜欢吃东西怎么办 半岁宝宝太活泼怎么办