hud1007 Quoit Design

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<string>
 7 #include<cmath>
 8 #include<ctime>
 9 #include<queue>
10 #include<stack>
11 #include<map>
12 #include<set>
13 #define rre(i,r,l) for(int i=(r);i>=(l);i--)
14 #define re(i,l,r) for(int i=(l);i<=(r);i++)
15 #define Clear(a,b) memset(a,b,sizeof(a))
16 #define inout(x) printf("%d",(x))
17 #define douin(x) scanf("%lf",&x)
18 #define strin(x) scanf("%s",(x))
19 #define LLin(x) scanf("%lld",&x)
20 #define op operator
21 #define CSC main
22 typedef unsigned long long ULL;
23 typedef const int cint;
24 typedef long long LL;
25 using namespace std;
26 double f(const long double &a){return a*a;}
27 const double inf=2147483647;
28 void inin(int &ret)
29 {
30     ret=0;int f=0;char ch=getchar();
31     while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
32     while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar();
33     ret=f?-ret:ret;
34 }
35 struct xl
36 {
37     double x,y;
38     void in(){douin(x),douin(y);}
39     xl(double x=0,double y=0):x(x),y(y){}
40     bool op < (const xl &rhs)const {return x==rhs.x?y<rhs.y:x<rhs.x;}
41 };
42 xl di[100010];
43 int wocao[100010];
44 int n,top;
45 bool com(const int &a,const int &b)
46 {
47     return di[a].y<di[b].y;
48 }
49 double dis(const xl &a,const xl &b)
50 {
51     return sqrt(f(a.x-b.x)+f(a.y-b.y));
52 }
53 double mindis(int l,int r)
54 {
55     double ret=inf;
56     if(l==r)return ret;
57     if(r-l+1<=3)
58     {
59         re(i,l,r)re(j,i+1,r)
60             ret=min(ret,dis(di[i],di[j]));
61         return ret;
62     }
63     int mid=(l+r)>>1;
64     ret=min(mindis(l,mid),mindis(mid+1,r));
65     top=0;
66     re(i,l,r)
67     {
68         double temp=abs(di[mid].x-di[i].x);
69         if(temp<=ret)wocao[++top]=i;
70     }
71     sort(wocao+1,wocao+top+1,com);
72     re(i,1,top)
73         re(j,i+1,top)
74         {
75             if(di[wocao[j]].y-di[wocao[i]].y>=ret)break;
76             ret=min(ret,dis(di[wocao[i]],di[wocao[j]]));
77         }
78     top=0;
79     return ret;
80 }
81 int main()
82 {
83     while(~scanf("%d",&n)&&n)
84     {
85         re(i,1,n)di[i].in();
86         sort(di+1,di+n+1);
87         printf("%.2f\n",mindis(1,n)/2);
88     }
89      return 0;
90 }

 

转载于:https://www.cnblogs.com/HugeGun/p/5266016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值