1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=5e5+5; struct node{double x,y;int id;}p[N]; bool cmp(node p1,node p2){if(p1.x!=p2.x)return p1.x<p2.x;else return p1.y<p2.y;} double dis(node p1,node p2){return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));} int x,y; double ans; void solve(int l, int r) { if (l == r) return ; int mid = (l + r) >> 1; solve(l,mid); solve(mid+1, r); int tl = mid, tr = mid; while (tl >= l && p[mid].x - p[tl].x < ans) tl--; tl++; while (tr <= r && p[tr].x - p[mid].x < ans) tr++; tr--; for (int i = tl; i < tr; i++) for (int j = i + 1; j <= tr; j++) { double tmp = dis(p[i], p[j]); if (tmp < ans) { ans = tmp; x = p[i].id; y = p[j].id; } } } int main() { int T;scanf("%d",&T); while(T--) { int n;scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y),p[i].id=i; sort(p+1,p+n+1,cmp); ans=1e18; solve(1,n); printf("%d %d\n",x-1,y-1); } return 0; }
- 1
信息
- ID
- 3330
- 时间
- 5000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 9
- 已通过
- 1
- 上传者