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的下标记录在a
51         if( (point[mid].x-point[mid-i].x)<=closest )
52             a[j++]=mid-i;
53         else
54             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         else
60             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了。呵呵

时间: 2024-10-24 05:54:50

HDU 1001(TLE代码)★留着待修改★的相关文章

求开4个线程4秒内执行完以下程序;部分代码已标注不能修改(多线程)

求开4个线程4秒内执行完以下程序:部分代码已标注不能修改 1 public class LogTest { 2 // 里面的方法不能动 3 public static void parseLog(String log) { 4 System.out.println(log + ":" + (System.currentTimeMillis() / 1000)); 5 try { 6 Thread.sleep(1000); 7 } catch (Exception e) { 8 e.pr

IDEA中Git更新合并代码后,本地修改丢失

IDEA中,使用Git下载了远程服务器的代码,发现自己修改的代码不在了,慌死了. 因为有冲突的地方,没有办法合并,所以直接使用了远程的代码 无须担心,其实代码一直保存在IDEA中,此时需要 1.选择Git-->Unstash Changes.. 2.选择最新的一个代码,再Apply Stash,所有的更改就回来了 最后提交代码的时候,再Merge一下

jq超简单的流式布局,代码简单,容易修改

1.看看效果吧! 2.html代码index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> ul{position: relative;padding: 0 -3px;list-style: none;width: 600px;margi

java--Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改

Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改 一.每次输入都自动提示 点击Eclipse,使其成为第一响应者,preferences->Java->Editor->Content Assist再右下角Auto activation triggers for Java里面改为 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789这样每次输入上面字母都会自动提示了 你还可以修改下Auto a

PCB .net Genesis脚本在没有源代码情况更改代码的工具与修改方法

记录一下发生在三个月前,在没有.net Genesis脚本源代码情况直接更改硬代码的工具与修改方法  一.背景 Genesis脚本是.net语言编写,由于外网IP地址不可用,Genesis脚本更新程序有连接到外网IP地址,直接硬代码写死了,目前此外网IP地址不通,需切换为内部IP才行但编写此程序前辈,没有留下源代码.  二..net脚本修改方法 使用Reflector工具和Reflexil插件,实现.net程序变量值修改,并生新生成exe  三. Reflector和Reflexil 工具下载地

石化盈科系统架构代码复用模板之四:修改数据模板

效果图如下所示: 包的结构图如下(面向接口编程): view层代码如下所示: createInstance.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/easyui/easyui.jsp"%> <!DOCTYPE html

HDU 3966(树链剖分+点修改+点查询)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题目大意:营地的分布成树型.每个营地都有一些人,每次修改修改一条链上的所有营地的人数,每次查询单个点. 解题思路: 树链剖分基础题. 维护一个sum. 注意轻链修改时,点修改和边修改的不同. 由于树的结构与线段树点的顺序不太相同,因此需要做一个映射数组rank.故在线段树Build的时候,权值是camp[rank[l]],rank这步的映射在dfs2的时候完成,rank[w[u]]=u; Qu

eclipse代码提示框背景色修改

由于个人习惯,喜欢把eclipse的文本编辑框背景调成全黑色,但是代码提示框的默认背景色也是黑色,所以两者就冲突了,导致看不到代码提示框的内容.后来发现代码提示框的背景色可以修改.修改内容如下: 在窗口(windows)-->首选项(preference)-->外观(Appearance)-->颜色与字体(colors and fonts)有一个内容辅助背景色选项,这个就是代码提示的背景色: 版权声明:本文为博主原创文章,未经博主允许不得转载.

Eclipse中代码编辑背景颜色修改

代码编辑界面默认颜色为白色.对于长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以改变workspace的背景色,可以使眼睛舒服一些.设置方法如下: 1.打开window / Preference,弹出Preference面板 2.展开General标签,选中Editors选项,展开. 3.选中 Text Editors,右边出现TestEditors面板. 面板中有这样一个选项:Appearance color options:其中是各种板块颜色的设置,其中有一项是background co