提交时间:2024-10-30 14:50:45
运行 ID: 33914
#include<bits/stdc++.h> #define int long long #define doub long double using namespace std; const doub eps=1e-12; const int maxn=1e5+7; int n; int x[maxn],y[maxn]; inline int cmp(doub x,doub y){ if(x-y>eps)return 1; if(y-x>eps)return -1; return 0; } inline void chmx(doub &a,doub b){if(cmp(b,a)==1)a=b;} inline doub sq(doub x){return 1.0*x*x;} inline doub Euc(int i,int j){return sqrtl(sq(x[i]-x[j])+sq(y[i]-y[j]));} inline doub Man(int i,int j){return abs(x[i]-x[j])+abs(y[i]-y[j]);} inline void rd(int &x){ x=0;int f=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} } inline void sub1(){ doub ans=0; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ doub c=Man(i,j)/Euc(i,j); chmx(ans,c); } } cout<<fixed<<setprecision(12)<<ans<<endl; } struct Poi{ int x,y,id; Poi(int _x=0,int _y=0,int _i=0){x=_x,y=_y,id=_i;} }P[maxn]; inline bool cmp1(Poi A,Poi B){return A.x<B.x;} inline bool cmp2(Poi A,Poi B){return A.y<B.y;} inline void sub2(){ for(int i=1;i<=n;i++)P[i]=Poi(y[i]+x[i],y[i]-x[i],i); sort(P+1,P+n+1,cmp1); doub ans=0; for(int i=1;i<=n;i++){ if(i>1)chmx(ans,Man(P[i].id,P[i-1].id)/Euc(P[i].id,P[i-1].id)); if(i<n)chmx(ans,Man(P[i].id,P[i+1].id)/Euc(P[i].id,P[i+1].id)); } sort(P+1,P+n+1,cmp2); for(int i=1;i<=n;i++){ if(i>1)chmx(ans,Man(P[i].id,P[i-1].id)/Euc(P[i].id,P[i-1].id)); if(i<n)chmx(ans,Man(P[i].id,P[i+1].id)/Euc(P[i].id,P[i+1].id)); } cout<<fixed<<setprecision(12)<<ans<<endl; } inline void slv(){ rd(n); for(int i=1;i<=n;i++)rd(x[i]),rd(y[i]); if(n<=1000)sub1(); else sub2(); } signed main(){ // freopen("pair.in","r",stdin); // freopen("pair.out","w",stdout); int t; cin>>t; while(t--)slv(); return 0; }