HDOJ-1007 Quoit Design(最接近点问题)
2016-03-27 16:10
295 查看
#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <cstdio> using namespace std; #define maxn 100005 #define INF 1e20 struct Point{ double x, y; }p[maxn]; bool cmp(const Point &a, const Point &b){ return a.x < b.x; } bool temp(int i, int j){ return p[i].y < p[j].y; } double Cal(int i, int j){ return sqrt((p[i].x - p[j].x) * (p[i].x - p[j].x) + (p[i].y - p[j].y) * (p[i].y - p[j].y)); } double Closed(int l, int r){ if(l == r) return INF; if(l == r-1) return Cal(l, r); int mid = (l + r) >> 1; double d = min(Closed(l, mid), Closed(mid+1, r)); vector<int> v; for(int i = l; i <= r; i++) if(fabs(p[i].x - p[mid].x) < d) v.push_back(i); sort(v.begin(), v.end(), temp); for(int i = 0; i < v.size(); i++) for(int j = i+1; j < v.size() && fabs(p[v[i]].y-p[v[j]].y) < d; j++) d = min(d, Cal(v[i], v[j])); return d; } int main(){ // freopen("in.txt", "r", stdin); int n; while(cin >> n && n){ for(int i = 0; i < n; i++){ scanf("%lf%lf", &p[i].x, &p[i].y); } sort(p, p+n, cmp); printf("%.2f\n", Closed(0, n-1)/2.0); } return 0; }
相关文章推荐
- oracle 时间格式化代码出错
- 大整数相乘
- 使用Google的Gson实现对象和json字符串之间的转换
- bootstrap中按钮点击会自动刷新解决
- Leetcode Majority Element I&II
- 机器学习实战(5)--SVM(Support vector machine)(一)
- 经典算法设计方法
- 数据结构实验之链表二:逆序建立链表
- 从此不求人:自主研发一套PHP前端开发框架(10)
- ASP.NET-js和C#混合编程的例子
- CCF 命令行选项
- 分享一个链接
- iOS 使用系统API获取 字符串的 size
- java 的MD5加密密码
- 在Storyboard里拉伸一张图片
- Linux内核分析— —扒开系统调用的三层皮(下)
- 岛屿问题
- 实现VMware Workstation中的CentOS 6.6 上网的方法
- 第五周项目1(4)
- 第五周linux学习笔记