9‘,求条,玄关
查看原帖
9‘,求条,玄关
1087755
pistil楼主2025/6/24 18:22

WA#1#4#5#8(都输出的0)#11 MLE#6#7#10

#include<bits/stdc++.h>
typedef double ld;
using namespace std;
int n;
struct nood {
	ld x,y;
}b[100010],z[100010];
//ld x[100010],y[100010];
vector<int> pjr;//存在b中的序号 
vector<int> yyr;
bool cmp(int a,int q){
	return b[a].y<b[q].y;
}
ld jl(int p,int q){
	ld ans=sqrt((b[p].x-b[q].x)*(b[p].x-b[q].x)+(b[p].y-b[q].y)*(b[p].y-b[q].y));
	cout<<"!"<<b[p].x<<" "<<b[p].y<<" "<<b[q].x<<" "<<b[q].y<<" "<<(double)ans<<endl;
	return ans;
}
ld hb(int t){
//cout<<2<<endl;
	ld minn=t;
//	cout<<"$"<<pjr.size()<<endl;
	sort(pjr.begin(),pjr.end(),cmp);
//	for(int i=0;i<pjr.size();i++){
//		int yzz=pjr[i];
//		cout<<"^"<<b[yzz].x<<" "<<b[yzz].y<<endl;
//	} 
	int i=0,j=1;
	for(;i<pjr.size()-1;i++){
		yyr.resize(0);
		while(j<pjr.size()&&b[pjr[j]].y<=b[pjr[i]].y+t){
			yyr.push_back(pjr[j]);
			j++;
		} 
//		cout<<"$"<<yyr.size()<<endl;
		if(yyr.size()==1){
			minn=min(minn,jl(pjr[i],pjr[j-1]));
		}
		if(yyr.size()>=1){
			for(int k=0;k<yyr.size()-1;k++){
				for(int p=k+1;p<yyr.size();p++){
					minn=min(minn,jl(yyr[k],yyr[p]));
				}
			}	
		}
	}
	cout<<(double)minn<<endl;
	return minn;
}
ld fzh(int l,int r){
//cout<<1<<endl;
	if(l==r) return 0x8f8f8f8f;
	int mid=(l+r)>>1;
	ld minn=min(fzh(l,mid),fzh(mid+1,r));
//cout<<"#"<<minn<<endl;
	int i=l,j=mid+1;
	for(int k=l;k<=r;k++){
		if(i>mid){
			while(j<=r) {
				z[k].x=b[j].x,z[k].y=b[j].y;
				k++,j++;
			}
			break;
		}
		if(j>r){
			while(i<=mid) {
				z[k].x=b[i].x,z[k].y=b[i].y;
				k++,i++;
			}
			break;
		}
		if(b[i].x>b[j].x) {
			z[k].x=b[j].x,z[k].y=b[j].y;
			j++;
		}
		else{
			z[k].x=b[i].x,z[k].y=b[i].y;
			i++;
		}
	}
	if(l==r-1) return jl(l,r);
	long long midn=(b[mid].x+b[mid+1].x)/2,p=midn-minn,q=midn+minn+1;
//	cout<<l<<" "<<r<<endl;
	int flag=0;
	for(int k=l;k<=r;k++){
//		cout<<z[k]<<"*";
		if(flag) {
			pjr.push_back(k);
		}
		b[k].x=z[k].x,b[k].y=z[k].y;
		if(!flag&&b[k].x>=p) {
			pjr.resize(0);
			pjr.push_back(k);
			flag=1;
		}
		if(flag&&b[k].x>=q) flag=0;
	}
//	cout<<"@"<<pjr.size();
	if(pjr.size()>1) minn=min(minn,hb(minn));
	cout<<"()"<<(double)minn<<endl;
	return minn;
}
int main(){
	freopen("P1429_1.in","r",stdin);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>b[i].x>>b[i].y;
//		b[i].x=x[i],b[i].y=y[i];
	}
	ld ans=fzh(1,n);
//	cout<<"//"<<(double)ans<<endl;
	printf("%.4lf",(double)ans);
	return 0;
} 
2025/6/24 18:22
加载中...