这题卡了一天,上午开始看算法导论,然后实现了,一开始是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. Java中的变量——通过示例学习Java编程(4)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=14&cid= 变量是用来存放可以更改的值的容 ...

  2. JavaScript之执行环境及作用域

        执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.我们编写的代码是无法访问这个对象的,但解 ...

  3. 详解HTML中的表格标签

    详细代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  4. Java MVC 分页实例

    共4个文件 requestLogList.jsp RequestInfoController.java RequestInfoBean.java RequestInfoService.java 1.r ...

  5. MSSQL复制表

    -复制表结构有句型的--跨数据库 --复制结构+数据 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 --只复制结构 select * into 数据库名.d ...

  6. maven打包错误:java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

    Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.118 sec <<< FAILURE! - in ...

  7. 如何用JavaScript判断前端应用运行环境(移动平台还是桌面环境)

    我们部署在某些云平台或者Web服务器上的前端应用,既可以用PC端浏览器访问,也可以用手机上的浏览器访问. 在前端应用里,有时候我们需要根据运行环境的不同做出对应处理.比如下面这段逻辑,如果判断出应用当 ...

  8. SpringMVC、Spring和Struts的区别

    http://www.cnblogs.com/hhx626/p/6010293.html 导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用 ...

  9. WPF中引入外部资源

    有时候需要在WPF中引入外部资源,比如图片.音频.视频等,所以这个常见的技能还是需要GET到. 第一步:在VS中创建一个WPF窗口程序 第二步:从外部引入资源,这里以引入图片资源为例 1)新建Reso ...

  10. python基础一 day13 迭代器

    # 双下方法# print([1].__add__([2]))# print([1]+[2]) # 迭代器# l = [1,2,3]# 索引# 循环 for# for i in l:# i## for ...