uva11168 Airport(凸包)
来源:互联网 发布:去重sql语句 distinct 编辑:程序博客网 时间:2024/04/26 21:41
uva11168
题目
就是说有很多的居民点,现要建一条直线跑道,使得每个居民点到跑道的平均距离最小。
思路
求凸包,注意1个点和2个点的情况。
代码
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define pi acos (-1)using namespace std;typedef long long ll;const int maxn=10010;const double INF = 1e30;int tot;struct point{ double x, y; point (double _x = 0, double _y = 0) : x(_x), y(_y) {} point operator - (point a) const { return point (x-a.x, y-a.y); } point operator + (point a) const { return point (x+a.x, y+a.y); } bool operator < (const point &a) const { return x < a.x || (x == a.x && y < a.y); }} p[maxn];const double eps = 1e-10;int dcmp (double x){ if (fabs (x) < eps) return 0; else return x < 0 ? -1 : 1;}double cross (point a, point b){ return a.x*b.y-a.y*b.x;}double dot (point a, point b){ return a.x*b.x + a.y*b.y;}double AngleToRad (double x){ return x*pi/180;}point rotate (point a, double rad){ return point (a.x*cos (rad)-a.y*sin (rad), a.x*sin (rad)+a.y*cos (rad));}double ConvexPolygonArea (point *p, int n){ double area = 0; for (int i = 1; i < n-1; i++) area += cross (p[i]-p[0], p[i+1]-p[0]); return area/2.0;}int n, m;double l;point ch[maxn];int ConvexHull (int n){ sort (p, p+n); int m = 0; for (int i = 0; i < n; i++) { while (m > 1 && cross (ch[m-1]-ch[m-2], p[i]-ch[m-1]) <= 0) m--; ch[m++] = p[i]; } int k = m; for (int i = n-2; i >= 0; i--) { while (m > k && cross (ch[m-1]-ch[m-2], p[i]-ch[m-1]) <= 0) m--; ch[m++] = p[i]; } if (n > 1) m--; return m;}double dis (point a, point b){ double xx = a.x-b.x, yy = a.y-b.y; return sqrt (xx*xx + yy*yy);}int main(){ int T; scanf("%d",&T); int kase=1; while(T--) { tot=0; scanf("%d",&n); for(int i=0; i<n; i++) { double x,y; scanf("%lf%lf",&x,&y); p[tot++]=point(x,y); } if(n==2||n==1) { printf("Case #%d: 0.000\n",kase++); continue; } m=ConvexHull(tot); double ans=INF; ch[m+1]=ch[1]; for(int i=1; i<=m; i++) { double temp=0; double dist=dis(ch[i],ch[i+1]); for(int j=0; j<tot; j++) { temp+=cross (ch[i]-p[j], ch[i+1]-p[j])/dist; } ans=min(ans,temp); } printf("Case #%d: %.3lf\n",kase++,ans/(n*1.0)); } return 0;}
0 0
- uva11168 Airport(凸包)
- 凸包 【uva11168】 Airport
- UVA11168 Airport 凸包问题
- uva11168 Airport
- UVA 11168 - Airport 凸包
- UVA 11168 Airport(凸包)
- UVA 11168 Airport(凸包)
- UVa 11168 Airport 凸包
- UVa 11168 Airport , 凸包
- UVA 11168 Airport 凸包 .
- Uva 11168 Airport (凸包)
- UVa11168
- UVa11168
- uva 11168 - Airport(凸包)
- Uva 11168 Airport(凸包)
- UVA11168凸包的应用之使用解析几何巧妙节省时间
- UVA 11168 Airport 凸包+直线的一般式
- Airport(凸包加点与直线的距离)
- PackageInstaller源码分析(二)
- 【Apache ZooKeeper】命令行zkCli.sh使用指南
- 网安project 密码管理器实现
- Thread多线程(一)
- 检测格式化字符串攻击脚本
- uva11168 Airport(凸包)
- 编译linux内核入门
- Intellij IDEA 中JAR包的导出
- EventBus集成和使用
- android录制视频实现
- [LeetCode-Java]11. Container With Most Water
- 音乐推荐&Audioscrobbler数据集
- 在LCD1602上面显示DS1302掉电时钟和日期
- 这是我的第一篇博文