zoukankan      html  css  js  c++  java
  • poj 3714 Raid 夜

    http://poj.org/problem?id=3714

    #include<iostream>
    #include<cstdio>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<cmath>

    using  namespace std;
    const double Max=2000000000.0;
    struct node
    {
        long x,y;
        bool k;
    }mem[200005];
    int M;
    bool cmp(node a,node b)
    {
        return a.x<b.x;
    }
    bool cmp1(node a,node b)
    {
        return abs((a.y-M))<abs((b.y-M));
    }
    inline double L(int i,int j)
    {
        if(mem[i].k==mem[j].k)
        {
            return Max;
        }
        long long x=(mem[i].x-mem[j].x);
        long long y=(mem[i].y-mem[j].y);
        return double (sqrt((x*x)+(y*y)));
    }
    double find(int I,int J)
    {
        if(J-I==0)
        return Max;
        if(J-I==1)
        {
            return L(I,J);
        }
        int mid=(I+J)>>1;
        double an=min(find(I,mid),find(mid+1,J));
        int i,j;
        i=mid;
        while(i>=I&&mem[mid].x-mem[i].x<=an)
        {
            --i;
        }
        ++i;
        j=mid;
        while(j<=J&&mem[j].x-mem[mid].x<=an)
        ++j;
        --j;
        for(;i<=mid;++i)
        {
            M=mem[i].y;
            sort(mem+mid+1,mem+j+1,cmp1);
            for(int l=mid+1;l<=j&&l<=mid+6;++l)
            {
               an=min(an,L(i,l));
            }
        }
        sort(mem+mid+1,mem+j+1,cmp);
        return an;

    }

    int main()
    {
        //freopen("data.txt","r",stdin);
        //freopen("A-large-practice.out","w",stdout);
        int T;
        int n;
        int i;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            for(i=1;i<=n;++i)
            {
                scanf("%ld %ld",&mem[i].x,&mem[i].y);
                mem[i].k=true;
            }
            for(;i<=2*n;++i)
            {
                scanf("%ld %ld",&mem[i].x,&mem[i].y);
                mem[i].k=false;
            }
            sort(mem+1,mem+1+2*n,cmp);
            printf("%.3f\n",find(1,2*n));

        }
        return 0;
    }

  • 相关阅读:
    SpirngBoot整合Mybatis Plus多数据源
    SpringBoot整合EasyPoi 封装Excel导出通用工具类,行高自适应,导出图片
    阿里云服务器安装Docker Compose
    设置Docker容器里的时间
    坏代码导致的性能问题大赏:CPU占用飙到了900%!
    Java程序员涨薪必备的性能调优知识点,收好了!
    SprinMvc快速入门
    python中文乱码问题
    python中自定义函数类的引用(最全)
    datax
  • 原文地址:https://www.cnblogs.com/liulangye/p/2421885.html
Copyright © 2011-2022 走看看