题目: 城市距离 Description J国有N个城市,每个城市有其坐标设为(xi,yi)
规定两个城市之间的距离为min(|xi−xj|,|yi−yj|)
现在问J国中距离最远的两个城市之间的距离是?
Format Input 第一行包含两个整数n
接下n行,每行两个数字代表城市的坐标,其值在[0,1e9]
2<=N<=2e5
Output 如题
Samples
输入数据 1
3
0 3
3 1
4 10
输出数据 1
4
代码:
#include <bits/stdc++.h>
using namespace std;
long long n;
struct student{
long long x,y;
};
student f[2500000];
bool cmp(student a,student b){
if(a.x!=b.x)
return a.x<b.x;
else
return a.y<b.y;
}
int z(long long x){
for(int i=1,j=n;i<j;){
if(x>=min(abs(f[i].x-f[j].x),abs(f[i].y-f[j].y))) j--;
else i++;
if(i+1==j){
if(x==min(abs(f[i].x-f[j].x),abs(f[i].y-f[j].y))) return 1;
else return 0;
}
}
}
int main()
{
long long l=0,r=1e9,mid,ans=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>f[i].x>>f[i].y;
sort(f+1,f+1+n,cmp);
while(l<=r){
mid = (l+r)/2;
if(z(mid)) {
l = mid + 1;
ans = mid;
}
else r = mid - 1;
}
cout<<ans;
return 0;
}