[UVA10245] The Closest Pair Problem && 暴力版本
2015-02-07 15:30
274 查看
暴力版本需要剪枝 先按x排序 若当前两个连续的点的横坐标差大于ans就剪枝
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<set> #include<map> #include<iostream> #define SF scanf #define PF printf using namespace std; typedef long long LL; const int MAXN = 10000; struct Vector { double x, y; Vector () {} Vector (double _x, double _y) { x = _x; y = _y; } Vector (double rad) { x = cos(rad); y = sin(rad); } double len() { return sqrt(x*x+y*y); } Vector operator + (const Vector &b) const { return Vector(x + b.x, y + b.x); } Vector operator - (const Vector &b) const { return Vector(x - b.x, y - b.x); } Vector operator * (const double &b) const { return Vector(x * b, x / b); } Vector operator / (const double &b) const { return Vector(x / b, y / b); } bool operator < (const Vector &b) const { return (x < b.x || (x == b.x && y < b.y)); } }; typedef Vector Point, Angle; struct Line { Point p; Vector v; double ang; bool operator < (const Line &b) const { return ang < b.ang; } }; double Dot(const Vector &a, const Vector &b) { return a.x * b.x + a.y * b.y; } double Cross(const Vector &a, const Vector &b) { return a.x * b.y - a.y * b.x; } Point GetIntersection(const Point &a, const Point &b, const Point &c, const Point &d) { double t = Cross(d - c, a - c) / Cross(b - a, d - c); return a + (b - a) * t; } Point GetIntersection(const Line &a, const Line &b) { double t = Cross(b.v, a.p - b.p) / Cross(a.v, b.v); return a.p + a.v * t; } double GetDis(const Point &a, const Point &b) { return sqrt((a.x-b.x) * (a.x-b.x) + (a.y-b.y) * (a.y-b.y)); } double GetMinDisPoint(Point *A, int N) { sort(A, A+N); double Min = 1e8; for(int i = 1; i <= N; i++) { for(int j = i + 1; j <= N; j++) if(A[j].x - A[i].x > Min) break; else Min = min(Min, GetDis(A[i], A[j])); } return Min; } Point A[MAXN+10]; int main() { int n; while(SF("%d", &n) && n) { for(int i = 0; i < n; i++) SF("%lf%lf", &A[i].x, &A[i].y); double dis = GetMinDisPoint(A, n); if(dis < 10000) PF("%.4f\n", dis); else puts("INFINITY"); } }
相关文章推荐
- uva10245 - The Closest Pair Problem(暴力+剪枝)
- uva 10245 - The Closest Pair Problem(暴力剪枝)
- The Closest Pair Problem UVA - 10245(暴力)
- uva10245 - - The Closest Pair Problem(最近点问题)
- uva10245-The Closest Pair Problem(平面上的点分治)
- UVA - 10245 The Closest Pair Problem 直接暴力(数据很水)
- uva 10245 The Closest Pair Problem (暴力+剪枝)
- UVA10245 - The Closest Pair Problem
- UVa 10245 - The Closest Pair Problem
- UVaOJ10245 - The Closest Pair Problem
- UVa 10245 - The Closest Pair Problem
- uva10245 The Closest Pair Problem
- The Closest Pair Problem uva+分治
- [分治]UVA10245 The Closest Pair Problem
- uva 10245 The Closest Pair Problem_枚举
- UVa 10245 - The Closest Pair Problem
- uva 10245 The Closest Pair Problem
- 10245 - The Closest Pair Problem
- uva 10245 The Closest Pair Problem_枚举
- Uva10245-The Closest Pair Problem