代码是抄的 代码在 discuss里面
注释是思路,
简单的讲就是先把近的点放在一起然后看周围6个点的距离最近的值
#include <cstdio>
using namespace std;
const int MAX = 100000000;
//单纯的点和x+y的值
struct node
{
double x;
double y;
double s;
};
//快排
bool comp(node a,node b)
{
return a.s < b.s;
}
int main()
{
int i, j, k, u, n, m, cnt;
struct node ar[100010];
//当sa[1000010]会报错 seg... core错误
double sa[100010], a, b, c, min;
while(scanf("%d",&n)!=EOF){
if(n == 0)
break;
//cout<<"hello"<<endl;
for(i = 1;i<=n;i++){
scanf("%lf %lf",&ar[i].x, &ar[i].y);
ar[i].s = ar[i].x + ar[i].y;
}
sort(ar+1,ar+1+n,comp);//排序
/* for(i=1;i<=n;i++)
{
cout<<ar[i].x<<ar[i].y;
}*/
cnt = 1;
min = MAX;
//经过排序以后所有靠近的点都在附近所以可以选取周围的六个比较距离选取最近的距离
for (i = 1;i<=n;i++)
{
for(j =i+ 1;j<i+1+6 &&j<=n;j++)
{
sa[cnt] = sqrt((ar[i].x - ar[j].x)*(ar[i].x - ar[j].x)+\
(ar[i].y-ar[j].y)*(ar[i].y-ar[j].y));
if(min > sa[cnt])
{
min = sa[cnt];
}
cnt++;
}
}
printf("%.2lf\n",min/2.0);
}
return 0;
}
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》