• hdoj 1007 java MLE通不过


    参考网上的一个算法,但是一直都是MLE,实在是想不出来什么办法了。

    参考博客:编程之美寻找最近点对

    import java.util.Arrays;
    import java.util.Scanner;
    public class Main {
        public static int N=100000;
        public static int[] list=new int[N];
        public static Point[] ptns=new Point[N];
        public static float MAX=Float.MAX_VALUE;
        public static float dis(int i,int j)
        {
            return (ptns[i].x-ptns[j].x)*(ptns[i].x-ptns[j].x)+(ptns[i].y-ptns[j].y)*(ptns[i].y-ptns[j].y);
        }
        public static float closestPair(int left,int right)
        {
            float d=MAX;
            if(left==right)
                return d;
            else if(left+1==right)
                return dis(left, right);
            int mid=(left+right)>>1;
            float d1=closestPair(left, mid);
            float d2=closestPair(mid+1, right);
            d=Math.min(d1, d2);
            int i=0,j=0,k=0;
            for(i=left;i<=right;i++)
            {
                if(Math.abs(ptns[mid].y-ptns[i].y)<d && i!=mid)
                    list[k++]=i;
            }
            //对d距离内的点求最近点对
            for(i=0;i<k;i++)
            {
                for(j=i+1;j<k && Math.abs(ptns[list[j]].x-ptns[list[i]].x)<d;j++)
                {
                    float dx=dis(list[i], list[j]);
                    if(d>dx)
                    {
                        d=dx;
                    }
                }
            }
            return d;
        }
        public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            int n=Integer.MAX_VALUE;
            n=scanner.nextInt();
            while(n!=0)
            {
                for(int i=0;i<n;i++)
                {
                    Point point=new Point();
                    point.x=scanner.nextFloat();
                    point.y=scanner.nextFloat();
                    ptns[i]=point;
                }
                Arrays.sort(ptns,0,n-1);
                System.out.println(String.format("%.2f",Math.sqrt(closestPair(0, n-1))/2));
                n=scanner.nextInt();
            }
            scanner.close();
        }
        static class Point implements Comparable<Point>
        {
            public float x;
            public float y;
            @Override
            public int compareTo(Point o) {
                // TODO Auto-generated method stub
                if(this.y>o.y)
                    return 1;
                else if(this.y<o.y)
                    return -1;
                else 
                {
                    if(this.x>o.x)
                        return 1;
                    else if(this.x<o.x)
                        return -1;
                    return 0;
                }
            }    
        }
    }
  • 相关阅读:
    VOIP开源项目源码地址(一)
    iptables下udp穿越实用篇
    function socket about http://net.pku.edu.cn/~yhf/linux_c/function/14.html
    IOKE的SIP协议专栏
    XviD core API overview: Decoding
    Socket about
    sql海量数据优化
    Socket、多线程、消息队列、共享资源并发下的性能研究
    【转】SQL 索引理解
    SQL 索引理解
  • 原文地址:https://www.cnblogs.com/maydow/p/4563097.html
Copyright © 2020-2023  润新知