题目链接:http://codeforces.com/contest/801/problem/D
题意:给你一个多边形的n个点,点顺时针给出,每个点坐标xi,yi,然后让你求每个点做多移动距离dis,使他还能保持多边形。
分析:当时也不清楚凸包什么的,看了样例,发现和每个点到相邻点构成的直线的距离有关,计算之后发现是一半,然后样例太坑,我计算点到直线的距离算错了,强行求了一波中位线,然后样例是等腰的还过了,记下来,点到直线的距离具体看代码。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct st{ 4 double x, y; 5 }a[1005]; 6 double dis(double x1,double y1,double x2,double y2,double x,double y){ 7 if(x1!=x2){ 8 double k=(y2-y1)/(x2-x1); 9 return fabs((y-y1)-k*(x-x1))/sqrt(1+k*k); 10 } 11 else return fabs(x-x1); 12 } 13 int main() { 14 int n; 15 cin>>n; 16 for(int i=0;i<n;i++){ 17 cin>>a[i].x>>a[i].y; 18 } 19 double result=1e18; 20 for(int i=0;i<n;i++){ 21 double s=dis(a[(i-1+n)%n].x,a[(i-1+n)%n].y,a[(i+1)%n].x,a[(i+1)%n].y,a[i].x,a[i].y)*0.5; 22 result=min(result,s); 23 } 24 printf("%.8lf ",result); 25 return 0; 26 }