zoukankan      html  css  js  c++  java
  • 奋战杭电ACM(DAY5)1007

    1006题昨天想了整整一天一夜也没有结果……大哭所以跳过了……委屈过会去问一下老师,网上大神的答案都看不懂啊啊啊啊!!抓狂

    今天搞定了1007,暴力果然是没有好结果的,超时了……敲打

    正好前天刚看了递归与分治法,用上了,AC~微笑

    不过具体怎么计算算法复杂度还没搞懂,回去再琢磨琢磨!!奋斗

    Quoit Design

    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    #define n 100000
    struct point
    {
    	double x;
    	double y;
    }p1[n],p2[n];
    
    bool cpx(point a, point b)
    {
    	return a.x<b.x;
    }
    bool cpy(point a, point b)
    {
    	return a.y<b.y;
    }
    
    double dis(point a,point b)
    {
    	return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
    }
    
    double min(double a, double b)
    {
    	return a<b ? a : b;
    }
    
    double mindis(int l,int r)
    {
    	if(l+1==r)
    		return dis(p1[l],p1[r]);
    	if(l+2==r)
    		return min(dis(p1[l],p1[l+1]),min(dis(p1[l+1],p1[r]),dis(p1[r],p1[l])));
    	else
    	{
    		double mini;
    		int mid,i,count,j;
    		count=0;
    		mid = (l+r)/2;
    		mini =min(mindis(l,mid), mindis(mid+1,r));
    		for(i=l; i<=r; i++)
    		{
    			if(fabs(p1[i].x-p1[mid].x) <=mini)
    			{
    				p2[count]=p1[i];	
    				count +=1;
    			}
    		}
    		sort(p2,p2+count,cpy);
    		for(i=0; i<count-1; i++)
    		{
    			for(j=i+1; j<count; j++)
    			{
    				if(fabs(p2[i].y-p2[j].y) > mini)
    					break;
    				else 
    				{
    					if(dis(p2[i],p2[j]) < mini)
    						mini = dis(p2[i],p2[j]);
    				}
    			}
    		}
    			return mini;
    	}
    }
    
    int main()
    {
    	int N;
    	while(cin >> N)
    	{
    		if(N==0)
    			break;
    		else
    		{
    			int i;
    			for(i=0; i<N; i++)
    				cin >> p1[i].x >> p1[i].y ;
    			sort(p1,p1+N,cpx);
    			double res;
    			res = mindis(0,N-1);
    			cout << setiosflags(ios::fixed) <<setprecision(2) << res/2 << endl;
    		}
    	}
    	return 0;
    }
    


  • 相关阅读:
    记录MySQL中优化sql语句查询常用的30种方法
    记录分布式和集群的区别
    TCP的三次握手与四次挥手理解及面试题(很全面)
    记录Linux常用命令大全
    DNS解析流程
    dup和dup2用法小结
    c++多态的实现
    linux下常见的字符串处理
    ncurses库的一些函数
    用两个栈实现一个队列
  • 原文地址:https://www.cnblogs.com/ques3512012019/p/3295211.html
Copyright © 2011-2022 走看看