HDU1007 TLE代码和AC代码对比
这题卡了一天,上午开始看算法导论,然后实现了,一开始是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代码对比的更多相关文章
- HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...
- python爬虫学习(7) —— 爬取你的AC代码
上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...
- ZOJ Problem Set - 1338 Up and Down Sequences 解释 ac代码
这道题目我一开始一头雾水,怎么都数不对,参考了下网上的博文,才弄懂. 题意是这样的,如果是上升序列,上升序列的长度不是所有上升数字的,是这么规定的,如果它与前一个数字构成上升,那么这个数字算上长度.所 ...
- ZOJ Problem Set - 1334 Basically Speaking ac代码及总结
这道题目不难,是一道简单的进制转换问题,但是发现了自己两个遗漏的知识点: 1.关于scanf (1)scanf函数在输入时是以回车或者空格作为一次输入的结束 (2)scanf函数在输入字符串的过程中是 ...
- LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
思路: 主要判断左子树与右子树. 在判断左时,循环下去肯定会到达叶子结点中最左边的结点与最右边的结点比较. 到了这一步因为他们都没有左(右)子树了,所以得开始判断这两个结点的右(左)子树了. 当某 ...
- 【南阳OJ分类之语言入门】80题题目+AC代码汇总
小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...
- 【原创】用Python爬取LeetCode的AC代码到Github
在leetCode写了105道题高调膜科,考虑搬迁到自己的GitHub上,做成一个解题题库,面试的时候也可以秀一个 但是!但是! leetCode在线IDE的功能不要太舒服,我直接线上A了不少题,本地 ...
- 洛谷P4014 分配问题【最小/大费用流】题解+AC代码
洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...
- 洛谷 P4016负载平衡问题【费用流】题解+AC代码
洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...
随机推荐
- 用Excel生成Sql
用Excel生成Sql: 以如图为例:点击一行数据的后面一个单元格,在上面的fx部分输入=,以等号开头证明这是一个公式.在等号的后面写上想要添加的数据,书写规范是这样:'"&A2&a ...
- plpgsql 数组、JSON相关
Function Return Type Description Example Result array_append(anyarray,anyelement) anyarray append an ...
- cvCanny的参数
cvCanny 函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvCanny( const CvArr* image, CvArr* edges, double thresho ...
- Android 6.0动态权限(转)
转自:http://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 Android 6.0 为了保护用户隐私,将一些权限的申 ...
- Android实现按钮点击效果(第一次点击变色,第二次恢复)
1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" ...
- windows Git的安装和使用
一.本人是根据廖雪峰大神的个人官网学习的git,并有感而发以做笔记的方式写下这篇博客,希望可以帮助到自己和其他人,廖雪峰个人官网http://www.liaoxuefeng.com/ 二.声明我的电脑 ...
- 微信程序开发系列教程(三)使用微信API给微信用户发文本消息
这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...
- python 基础网络编程2
python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...
- pseudogene|鉴定功能基因|expressed se|quence tag
基因 (鉴定DNA:可以直接利用DNA序列鉴别基因,但存在3个问题) 1.intron太长(使用用来连接的算法不可及) 2.因为通常功能基因的第一个oxen中有非编码区和启动子最后一个oxen中有终止 ...
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...