uva10245
来源:互联网 发布:oracle数据库发展历史 编辑:程序博客网 时间:2024/06/01 09:59
“题目大意:
找出最近的点的距离。如果距离大于10000 就等同于INFINITY
思路:
刚开始想说直接暴力的,但是看了数据觉得会超时,
所以就去看了题解。第一次做分治问题。
代码:
#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#include <algorithm>#include <cmath>struct node { double x,y;}n[10003];bool cmp(node a, node b) { return a.x < b.x;}double dis(node a,node b) { return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));}double findmin(int a,int b) { if(a > b) return 40004; if(a == b-1) return dis(n[a],n[b]); int l = (a + b) / 2 , r = (a + b) / 2, mid = (a + b) / 2; double d = min(findmin(a,mid-1),findmin(mid+1,b)); while(l >= a && d > n[mid].x - n[l].x) l--; while(r <= b && d > n[r].x - n[mid].x) r++; for(int i = l + 1 ; i < r; i++) for(int j = i + 1; j < r; j++) d = min(d,dis(n[i],n[j])); return d;}int main() { int N; while(scanf("%d",&N) && N) { for(int i = 0 ; i < N; i++) scanf("%lf %lf",&n[i].x,&n[i].y); sort(n,n+N,cmp); double d =findmin(0,N-1); if(d >= 10000) printf("INFINITY\n"); else printf("%.4lf\n",d); } return 0;}
0 0
- uva10245
- Uva10245-The Closest Pair Problem
- UVA10245 - The Closest Pair Problem
- [分治]UVA10245 The Closest Pair Problem
- [UVA10245] The Closest Pair Problem && 暴力版本
- uva10245 - The Closest Pair Proble(最近点对问题)
- uva10245 - The Closest Pair Problem(暴力+剪枝)
- uva10245 - - The Closest Pair Problem(最近点问题)
- 平面最小点对 模板(hdu1007 uva10245)
- 编译原理课设之简单编译器实现
- Java NIO学习总结三(Selector)
- solr发布到tomcat下
- JMeter一次简单的接口测试
- Linux命令之stty - 显示和修改终端行设置
- uva10245
- Toast的显示需要的环境
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- stdClass类转换成数组
- AndroidStudio导入sdk中的Sample工程
- PhantomJS
- 在windows下直接使用Mysql压缩包的操
- iOS字符串GBK编码转UTF-8
- MySQL慢查询开启及分析方法