首页 > 代码库 > HDU 1001(TLE代码)★留着待修改★
HDU 1001(TLE代码)★留着待修改★
1 #include <stdio.h> 2 #include <math.h> 3 struct node{ 4 double x,y; 5 }point[100000]; 6 struct node nod; 7 int n=0,i=0; 8 int sort(void){ //选择排序:从小到大 9 int j,k;10 for(i=0;i<n;i++){11 nod.x=point[i].x;12 nod.y=point[i].y;13 k=i;14 for(j=i+1;j<n;j++){15 if(nod.x>point[j].x){16 nod.x=point[j].x;17 nod.y=point[j].y;18 k=j;19 }20 }21 if(k!=i){22 point[k].x=point[i].x;23 point[k].y=point[i].y;24 point[i].x=nod.x;25 point[i].y=nod.y;26 }27 }28 return 0;29 }30 double distance(int num1,int num2){ //求两点间的距离31 return sqrt( (point[num2].x-point[num1].x)*(point[num2].x-point[num1].x)+(point[num2].y-point[num1].y)*(point[num2].y-point[num1].y) );32 }33 double min(double left,double right){34 return left<=right?left:right;35 }36 double close(int s,int e){//找出最近的两段距离37 double closest=0.0,left=0.0,right=0.0;38 int mid=0,i,j,k,t;39 int a[50000]={0},b[50000]={0};40 mid=(s+e)>>1;41 if(s+1==e)42 return distance(s,e);43 if(s==e)44 return 1.7976931348623158e+308;45 46 left=close(s,mid);47 right=close(mid+1,e);48 closest=min(left,right);49 50 for( i=1,j=0;i<mid;i++ ){ //把mid轴以左的所有距离小于closest的下标记录在a51 if( (point[mid].x-point[mid-i].x)<=closest )52 a[j++]=mid-i;53 else54 break;55 }56 for( i=1,k=0;i<(n-mid-1);i++ ){57 if( (point[mid+i].x-point[mid].x)<=closest )58 b[k++]=mid+i;59 else60 break;61 }62 //将a中的与b逐个找最小距离63 for(i=0;i<j;i++){64 for(t=0;t<k;t++){65 if(closest>distance(a[i],b[t])){66 closest=distance(a[i],b[t]);67 }68 } 69 }70 return closest;71 }72 int main()73 {74 int s=0,e=0;75 double tar=0.0;76 while(scanf("%d",&n)!=EOF&&n!=0){77 for(i=0;i<n;i++){ //输入所有坐标点78 scanf("%lf %lf",&point[i].x,&point[i].y);79 }80 s=0;81 e=n-1;82 sort();//排序83 tar=close(s,e);//找出最短距离84 if(tar<0.000001)85 printf("0.00\n");86 else{87 tar=tar/2;88 printf("%.2f\n",tar);89 }90 }91 return 0;92 }
具体思想及做法参照此文 http://blog.csdn.net/sun1956/article/details/8294048
以上代码是根据此文的讲解做出来的,与原文会有很多不同。
PO上HDU之后一直出问题,修改了5个小时,现在还是处于TLE中,对于题目给的3个数据算出来了。
麻烦看到的同学帮我看下问题出在哪,我不能再在此题浪费时间了,以后再来看也许一下就看出bug了。呵呵
HDU 1001(TLE代码)★留着待修改★
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。