多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 【hdoj 1007】最近點對

【hdoj 1007】最近點對

來源:程序員人生   發布時間:2015-05-19 08:01:36 閱讀次數:2843次

題目:傳送門

解答:直接暴力求解肯定會超時。此題核心就是求出來最近的1對點之間的距離,即最近點對算法。

扼要來講就是利用分治的思想,左半邊的最小距離,與右半邊的最小距離比較,得到1個mindist。再遍歷分界限左右 mindist 范圍內點的間距,取最小值。

這樣,需要暴力的只有分界限周圍的點。但是我第1次提交版本還是超時。詢問以后是由于優化不夠,寫在trick中。

這里1些trick:

  1. 分界限:不1定是距離上的等分,根據 x 軸位置排序落后行數量上的等分(取最中間的左右更好;
  2. 取中點暴力時,切記不要與本身比較(距離為0);
  3. 除非有 string,不然不要用 cin,scanf 會快上很多;
  4. 這個我1直很想吐槽……數據精度,做 oj 就別用 float 了,直接上 double(困擾我好久);
  5. 浮點數(float,double)是不存在完全相等的(參見這里)。可以用eps(1般為1e⑹, 1e⑻),利用 fabs(abs是整數取絕對值)判斷范圍是不是小于 eps.
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <vector> #include <map> #include <algorithm> #include <math.h> #include <string> #include <string.h> #define MAXDIST 1000000 using namespace std; struct Point{ double x; double y; }; int n; double x, y; bool tag; Point tmp; double eps = 1e⑻; Point gao[100005]; bool cmpxy (const Point a, const Point b) { if(a.x != b.x) { return a.x < b.x; } else { return a.y < b.y; } } bool cmpx (const Point a, const Point b) { return a.x < b.x; } bool cmpy (const Point a, const Point b) { return a.y < b.y; } double dist(const Point a, const Point b) { return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); } double nearestPair(int head, int tail) { if(head == tail) { return MAXDIST; } if(head + 1 == tail) { return dist(gao[head], gao[tail]); } int mid = (head + tail) >> 1; double d1 = nearestPair(head, mid); double d2 = nearestPair(mid + 1, tail); double mindist = d1 > d2 ? d2 : d1; for(int i = head; i<=tail; i++) { // 不能和本身比較,否則距離為 0 if(i != mid && gao[i].x > (gao[mid].x - mindist) && gao[i].x < (gao[mid].x + mindist)) { if(dist(gao[i], gao[mid]) < mindist) mindist = dist(gao[i], gao[mid]); } } return mindist; } int main() { while(cin>>n && n!= 0) { memset(gao, 0, sizeof(gao)); tag = false; for(int i=0; i<n; i++) { scanf("%lf%lf", &x, &y); tmp.x = x; tmp.y = y; gao[i] = tmp; } sort(gao, gao + n, cmpxy); for(int i=0; i < n⑴; i++) { if(fabs(gao[i].x - gao[i+1].x) < eps && fabs(gao[i].y - gao[i+1].y) < eps) tag = true; } if(tag) { cout<<"0.00"<<endl; continue; } else { double d = nearestPair(0, n⑴); printf("%.2f ", sqrt(d)/2); } } return 0; }

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美日韩不卡中文字幕在线 | xx在线视频| 国产精品视频播放 | 日韩欧美中文字幕一区 | 欧美一级aa天码毛片 | 欧美成人影院免费观 | 欧美a视频在线观看 | 91久久精品国产免费一区 | 久久精品这里 | 最近中文字幕高清中文字幕在线看 | jizzzz日本 | 欧美综合网站 | 一本大道道无香蕉综合在线 | 一级做性色a爰片久久毛片免费 | 国产xxxxxx久色视频在 | 尤物视频最新网址 | 伊人网大 | 国产亚洲欧美另类久久久 | 亚洲天堂一区二区 | 巨大黑人极品videos精品 | 国产三级国产精品国产国在线观看 | 亚洲色图欧美色 | 久久精品亚洲精品国产欧美 | 国内精品免费视频 | 欧美小网站| 红豆视频在线观看日本 | 爱爱小视频日本 | 多人做人爱视频大全在线观看 | 在线亚洲不卡 | 18欧美 | 国产精品免费αv视频 | 国产欧美日韩精品一区二区三区 | 免费的黄色网址 | 亚洲欧美成人综合在线 | jizz黄色| 国产精品视频第一区二区 | 日韩v欧美 | 国产一级精品高清一级毛片 | 麻豆69堂免费视频 | 日本香蕉一区二区三区 | 尤物在线视频观看 |