哪位大佬能帮我改下代码
  • 板块灌水区
  • 楼主wkzz2011
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/5/7 20:48
  • 上次更新2023/10/23 16:22:56
查看原帖
哪位大佬能帮我改下代码
1000293
wkzz2011楼主2023/5/7 20:48

题目: 城市距离 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;
}
2023/5/7 20:48
加载中...