二分 WA3~10 求调
查看原帖
二分 WA3~10 求调
917775
_buzhidao_楼主2025/6/27 21:41

rt。

#include<bits/stdc++.h>
using namespace std;

int m,n;
int s[505];
pair<int,int> t[1005];

inline double cal(const pair<int,int>& a,const pair<int,int>& b){
	return sqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));
}

bool vis[1005];
void dfs(int u,int mid){
	vis[u]=1;
	for(int v=1;v<=n;++v){
		if(!vis[v]&&cal(t[u],t[v])-mid<=1e-6) dfs(v,mid);
	}
}
bool check(int mid){
	dfs(1,mid);
	bool fl=1;
	for(int i=1;i<=n;++i){
		if(!vis[i]) fl=0;
		vis[i]=0;
	}
	return fl;
}

int main(){
	ios::sync_with_stdio(0);
	
	cin>>m;
	for(int i=1;i<=m;++i) cin>>s[i];
	
	cin>>n;
	for(int i=1;i<=n;++i) cin>>t[i].first>>t[i].second;
	
	sort(s+1,s+m+1);
	s[0]=-1,s[m+1]=1e9;
	
	int l=0,r=m+1;
	//[l,r) satisfies check(l)=0, check(r)=1
	while(r-l>1){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid;
	}
	
	cout<<m-r+1<<endl;
	
	return 0;
}
2025/6/27 21:41
加载中...