迷惑操作
查看原帖
迷惑操作
1021055
gdz0214_and_zxb0214楼主2025/1/4 09:59

为什么我只给数组用x排序,然后A了?

记录

#include<bits/stdc++.h>
 using namespace std;
struct pt{
	long long int x,y;
}s[100010],k[100010]; 
long long T,n;
double jh(pt a,pt b){
	return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool cmp(pt a,pt b){
	return a.x<b.x; 
}
int main(){
	scanf("%lld",&T);
	while(T--){
		double ans=1e18;
		scanf("%lld",&n);
		for(long long i=1;i<=n;i++){
			scanf("%lld%lld",&s[i].x,&s[i].y);
		}
		for(long long i=1;i<=n;i++){
			scanf("%lld%lld",&k[i].x,&k[i].y);
		}
		sort(s+1,s+1+n,cmp);
		sort(k+1,k+1+n,cmp);
		for(long long i=1;i<=n;i++){
			for(long long j=max(i-100ll,1ll);j<=min(i+100ll,n);j++){
				ans=min(ans,jh(s[i],k[j]));
			}
		}
		printf("%.3lf\n",ans);
	}
	return 0;
}

然后我用y排序却WA了

记录

using namespace std;
struct pt{
	long long int x,y;
}s[100010],k[100010]; 
long long T,n;
double jh(pt a,pt b){
	return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool cmp(pt a,pt b){
	return a.y<b.y;
}
int main(){
	scanf("%lld",&T);
	while(T--){
		double ans=1e18;
		scanf("%lld",&n);
		for(long long i=1;i<=n;i++){
			scanf("%lld%lld",&s[i].x,&s[i].y);
		}
		for(long long i=1;i<=n;i++){
			scanf("%lld%lld",&k[i].x,&k[i].y);
		}
		sort(s+1,s+1+n,cmp);
		sort(k+1,k+1+n,cmp);
		for(long long i=1;i<=n;i++){
			for(long long j=max(i-100ll,1ll);j<=min(i+100ll,n);j++){
				ans=min(ans,jh(s[i],k[j]));
			}
		}
		printf("%.3lf\n",ans);
	}
	return 0;
}
2025/1/4 09:59
加载中...