这题卡了一天,上午开始看算法导论,然后实现了,一开始是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. [Ubuntu]清除系统磁盘垃圾

    操作步骤: 1.sudo apt-get autoremove(卸载系统中所有未被使用的依赖关系) 2.sudo apt-get clean(清除所有缓存的包文件) 以上操作绿色无害,对系统无影响.

  2. log explorer使用的几个问题[转载]

    1)对数据库做了完全 差异 和日志备份备份时选用了删除事务日志中不活动的条目再用Log explorer打试图看日志时提示No log recorders found that match the f ...

  3. Openjudge 1.13-23:区间内的真素数

    总时间限制:  1000ms 内存限制:  65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数. 真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就 ...

  4. MVC简单登陆验证

    配置文件: <system.web> <authentication mode="Forms"> <!-- 如果验证失败就返回URL的指定界面,设置c ...

  5. Hello World投票以太坊Dapp教程-Part1

    参考资料:https://medium.com/@mvmurthy/full-stack-hello-world-voting-ethereum-dapp-tutorial-part-1-40d2d0 ...

  6. Dubbo中的监控和管理

    一.Dubbo中的监控 1.原理 原理:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心. 2.搭建监控服务 3.修改配置文件 修改注册中心的地址: 注意:这个 ...

  7. ios copy assign retain

    一,retain, copy, assign区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a ...

  8. python中函数定义之实参、形参

    一般在函数的定义中,会有一类变量---形参,它是函数完成其工作的一项信息.实参往往是调用函数时传递给函数的信息.我们在调用函数时,将要让函数使用的信息放在括号内.例如定义一个函数def greet_u ...

  9. 《Spring源码深度解析》第二章 容器的基本实现

    入门级别的spring配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&q ...

  10. webpack hmr

    参考: https://webpack.js.org/concepts/hot-module-replacement/ https://webpack.js.org/guides/hot-module ...