UVa 10245 - The Closest Pair Problem

来源:互联网 发布:差评最多的淘宝网店 编辑:程序博客网 时间:2024/05/23 11:55
看着比较简单,但10000的数据量让我TL了两次,需要进一步优化一下,剪一下枝后,AC了,rank还58,惊喜 ~~

代码如下:

#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<cmath>using namespace std;struct point{    double x, y;} po[10000 + 2];int cmp(const void *a, const void *b){    point *aa = (point*)a;    point *bb = (point*)b;    return aa ->x > bb->x ? 1 : -1;}int main(){#ifdef test    freopen("in.txt", "r", stdin);#endif    int t;    while(scanf("%d", &t), t)    {        double min = 10001;        for(int i = 0; i < t; i++)            scanf("%lf %lf", &po[i].x, &po[i].y);        qsort(po, t, sizeof(po[0]), cmp);        for(int i = 0; i < t; i++)            for(int j = i + 1; j < t; j++)            {                double d1 = po[i].x - po[j].x;                double d2 = po[i].y - po[j].y;                double dis = sqrt(d1 * d1 + d2 * d2);                if(po[j].x - po[i].x >= min)      //在这里剪一下枝                    break;                if(dis < min)                    min = dis;            }        if(min >= 10000)            printf("INFINITY\n");        else            printf("%.4lf\n",min);    }    return 0;}


原创粉丝点击