分别按x,y 排序一下找个最短的距离,记的前面写个false,不然就TLE了。。。
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cstdlib> #include <map> #include <list> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <iostream> #define go(i,a,b) for(int i=a;i<=b;i++) #define og(i,a,b) for(int i=a;i>=b;i--) #define mem(a) memset(a,0,sizeof(a)) #define cs cout<<"-----"<<endl; using namespace std; const int inf=0x3f3f3f3f; const int maxn = 1e5 + 5; const double pi = atan(1.)*4; typedef long long ll; typedef struct { double x,y; }Point; Point P[maxn]; bool cmpx(Point a,Point b) { return a.x < b.x; } bool cmpy(Point a,Point b) { return a.y < b.y; } double getdis(Point a,Point b) { return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); } int main() { ios::sync_with_stdio(false); int n; while(cin>>n && n) { for(int i = 0;i < n;i++) cin>>P[i].x>>P[i].y; sort(P,P+n,cmpx); double minn = inf; for(int i = 0;i < n-1;i++) { double p = getdis(P[i],P[i+1]); if(p < minn) minn = p; } sort(P,P+n,cmpy); for(int i = 0;i < n-1;i++) { double p = getdis(P[i],P[i+1]); if(p < minn) minn = p; } printf("%.2lf\n",minn/2.0); } return 0; }