hdu 1007 Quoit Design

来源:互联网 发布:淘宝开店教程全集下载 编辑:程序博客网 时间:2024/06/06 03:15

分治

C++输入输出超时

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#define inf 1<<30#define maxn 100010using namespace std;int n,f[maxn];struct stu{double x,y;};stu mapp[maxn];bool cmpx(stu x,stu y) {return x.x<y.x;}bool cmpy(int x,int y) {return mapp[x].y<mapp[y].y;}double dis(stu a,stu b)  {  return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));  } double solve(int l,int r){if(l==r){//return min(dis(mapp[l],mapp[r]),min(dis(mapp[l],mapp[l+1]),dis(mapp[l+1],mapp[r])));return inf;}else if(l==r-1){return dis(mapp[l],mapp[r]);}else{int mid=(l+r)/2;double d=min(solve(l,mid),solve(mid+1,r));int cnt=0;for(int i=l;i<=r;i++){if(abs(mapp[i].x-mapp[mid].x)<=d) f[cnt++]=i;}sort(f,f+cnt,cmpy);for(int i=0;i<cnt;i++){for(int j=i+1;j<cnt;j++){if(abs(mapp[f[i]].y-mapp[f[j]].y)>d) break;d=min(d,dis(mapp[f[i]],mapp[f[j]]));}}return d;}}int main(){//cin.sync_with_stdio(false);//while(cin>>n&&n)while(scanf("%d",&n)!=EOF){if(!n) break;for(int i=0;i<n;i++){//cin>>mapp[i].x>>mapp[i].y;scanf("%lf %lf",&mapp[i].x,&mapp[i].y); } sort(mapp,mapp+n,cmpx);printf("%.2f\n",solve(0,n-1)/2);}return 0;} 


0 0
原创粉丝点击