这题卡了一天,上午开始看算法导论,然后实现了,一开始是wa,后来TLE,由于我开始的实现方式比较笨,而且在递归调用的时候很是混乱,用了好多数组。导致我的代码不断的出问题。具体是算法导论33-4.

后来改动了一点,也是看到别人代码改的,我把两个代码都写上,大家一看便知!

在实现分治的时候,我是把左右两个分组都复制了,然后传递的是一个数组,好慢啊。。。改动就是把参数传递改成传的是地址了,这样就不用复制结构体数组啦,不知道节省了多少力气,(⊙o⊙)…

首先是AC代码

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string.h>
#define eps 0.000000001
#define S(x) (x)*(x)
#define aabs(x) (x)>0?(x):-(x)
using namespace std;
struct point{
double x,y;
};
bool cmp(point a,point b){
if( a.x==b.x) return a.y>b.y;
return a.x<b.x;
}
bool cmpy(point a,point b){
return (a.y>b.y);
}
struct point P[+];
struct point SCL[+];
double find(int l,int r){
int i,j,k,sn,mid=(l+r)/;
double res=,lres,lx,rx,rres,tmp;
if(r-l+<=){
for(i=l;i<=r;++i){
for(j=i+;j<=r;++j){
tmp=sqrt( S(P[i].x-P[j].x) + S(P[i].y-P[j].y) );
if(res-tmp>eps) res=tmp;
}
}
return res;
}
lres=find(l,mid); rres=find(mid+,r);
res=min(lres,rres);
lx=P[mid].x-res; rx=P[mid].x+res;
sn=;
for(i=l;i<=r;++i){
if(P[i].x-lx>eps && eps<rx-P[i].x){
SCL[sn].x=P[i].x; SCL[sn].y=P[i].y; sn++;
// printf("~~~~~~%lf,%lf\n",P[i].x,P[i].y);
}
}
sort(SCL,SCL+sn,cmpy);
for(i=;i<sn;++i){
for(j=i+;j<sn;++j){
if(SCL[i].y-SCL[j].y>res) break;
if(res- sqrt( S(SCL[j].x-SCL[i].x) + S(SCL[j].y-SCL[i].y) ) > eps)
res = sqrt( S(SCL[j].x-SCL[i].x) + S(SCL[j].y-SCL[i].y) );
}
}
return res;
} int main(){
int n;
int i,j;
while(~scanf("%d",&n)&&n){
for(i=;i<n;++i){
scanf("%lf%lf",&P[i].x,&P[i].y);
}
sort(P,P+n,cmp);
printf("%.2lf\n",find(,n-)/);
}
return ;
}

  然后是TLE代码!

!!!!!!!!!!!!

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string.h>
#define eps 0.000000001
#define S(x) (x)*(x)
#define aabs(x) (x)>0?(x):-(x)
using namespace std;
struct point{
double x,y;
};
bool cmp(point a,point b){
if( aabs(a.x-b.x) < eps) return (b.y-a.y)>eps;
return (b.x-a.x)>eps;
}
bool cmpy(point a,point b){
return (a.y>b.y);
}
struct point L[+],R[+];
struct point SCL[+];
double find(int n, struct point P[]){
int i,j,k,ln=,rn=,sn,mid=n/;
double res=,lx,rx,lres,rres,tmp;
// for(i=0;i<n;++i) printf("%lf %lf \n",P[i].x,P[i].y);
// printf("\n");
if(n<=){
for(i=;i<n;++i){
for(j=i+;j<n;++j){
tmp=sqrt( S(P[i].x-P[j].x) + S(P[i].y-P[j].y) );
if(res-tmp>eps) res=tmp;
}
}
return res;
}
for(i=;i<n;++i){ //init the L , R
if(i<mid){
L[ln].x=P[i].x; L[ln].y=P[i].y; ln++;
}else{
R[rn].x=P[i].x; R[rn].y=P[i].y; rn++;
}
}
lres=find(ln,L); rres=find(rn,R);
res=min(lres,rres);
lx=P[mid].x-res; rx=P[mid].x+res;
sn=;
for(i=;i<n;++i){
if(P[i].x-lx>eps && eps<rx-P[i].x){
SCL[sn].x=P[i].x; SCL[sn].y=P[i].y; sn++;
// printf("~~~~~~%lf,%lf\n",P[i].x,P[i].y);
}
}
sort(SCL,SCL+sn,cmpy);
for(i=;i<sn;++i){
for(j=i+;j<sn;++j){
if(SCL[i].y-SCL[j].y>res) break;
if(res- sqrt( S(SCL[j].x-SCL[i].x) + S(SCL[j].y-SCL[i].y) ) > eps)
res = sqrt( S(SCL[j].x-SCL[i].x) + S(SCL[j].y-SCL[i].y) );
}
}
return res;
} int main(){
int n;
int i,j;
point INIT[+];
while(~scanf("%d",&n)&&n){
for(i=;i<n;++i){
scanf("%lf%lf",&INIT[i].x,&INIT[i].y);
}
sort(INIT,INIT+n,cmp);
printf("%.2lf\n",find(n,INIT)/);
}
return ;
}

HDU1007 TLE代码和AC代码对比的更多相关文章

  1. HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...

  2. python爬虫学习(7) —— 爬取你的AC代码

    上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...

  3. ZOJ Problem Set - 1338 Up and Down Sequences 解释 ac代码

    这道题目我一开始一头雾水,怎么都数不对,参考了下网上的博文,才弄懂. 题意是这样的,如果是上升序列,上升序列的长度不是所有上升数字的,是这么规定的,如果它与前一个数字构成上升,那么这个数字算上长度.所 ...

  4. ZOJ Problem Set - 1334 Basically Speaking ac代码及总结

    这道题目不难,是一道简单的进制转换问题,但是发现了自己两个遗漏的知识点: 1.关于scanf (1)scanf函数在输入时是以回车或者空格作为一次输入的结束 (2)scanf函数在输入字符串的过程中是 ...

  5. LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)

      思路: 主要判断左子树与右子树. 在判断左时,循环下去肯定会到达叶子结点中最左边的结点与最右边的结点比较. 到了这一步因为他们都没有左(右)子树了,所以得开始判断这两个结点的右(左)子树了. 当某 ...

  6. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

  7. 【原创】用Python爬取LeetCode的AC代码到Github

    在leetCode写了105道题高调膜科,考虑搬迁到自己的GitHub上,做成一个解题题库,面试的时候也可以秀一个 但是!但是! leetCode在线IDE的功能不要太舒服,我直接线上A了不少题,本地 ...

  8. 洛谷P4014 分配问题【最小/大费用流】题解+AC代码

    洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...

  9. 洛谷 P4016负载平衡问题【费用流】题解+AC代码

    洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...

随机推荐

  1. IE浏览器兼容background-size

    background-size是CSS3新增的属性,IE8以下不支持,通过滤镜实现background-size效果 background-size:contain; // 缩小图片来适应元素的尺寸( ...

  2. android textview添加滚动条

    给textview添加滚动条 方式一: xml代码: //设置滚动条的方向 android:scrollbars="vertical" java中设置 tView=(TextVie ...

  3. Flask应用运行流程

    当我们运行项目后,Flask内部都经历了什么 1.app.run()启动项目,ctrl点进源码 app.py: 1)执行了run_simple() 2)注意第三个参数,这里是Flask实例化的对象,在 ...

  4. 最完整的台达PLC培训教程(沈阳工大)学习笔记1

    1) 可编程控制器的应用1 开关量逻辑控制:电动机启动与停止2 运动控制:对步进电动机或伺服电动机的单轴或多轴系统实现位置控制3 过程控制:对温度.压力.流量等连续变化的模拟量进行闭环控制4 数据处理 ...

  5. Objective-C相关Category的收集(更新)

    Categories是给你得不到源码的classes增加功能的一种方法.这个页面收集一些相关的Category,并且持续更新,你可以订阅关注.作者是Fille ?str?m,是@ IMGNRY的联合创 ...

  6. #include <> 和 #inlude ""的区别

    #include < >引用的是编译器的类库路径里面的头文件#include  " "引用的是你程序目录的相对路径中的头文件,在程序目录的相对路径中找不到该头文件时会继 ...

  7. myeclipse 导入项目时no projects are found to import解决办法

    myeclipse 识别一个工程需要.classpath与.project文件,一般无需提交SVN所以项目切下来的时候是没有这两个文件的. 方法1: 1) 在myeclipse中新建一个和你要导入的项 ...

  8. PHP的PDF扩展库TCPDF将中文字体设置为内嵌字体的方法

    1. 下载要设置的字体,如名为simfang.ttf,放在./vendor/tecnickcom/tcpdf/tools目录中 2.在tools目录中按住shift,点击鼠标右键,点击“在此处打开命令 ...

  9. windows 下phpstudy 升级mysql版本5.7

    今天在导入sql文件的时候遇到了sql执行错误.最后找到原因是因为mysql版本过低,导致出错 原因:在执行sql的时候出现了两次CURRENT_TIMESTAMP ,最后得知在5.7版本之前都是不支 ...

  10. tkinter学习-事件绑定与窗口

    阅读目录: 事件绑定 Toplevel组件 标准对话框 事件绑定: 说明:对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上. 事件序列: 说明:用户需要使用bind()方法将具 ...