1 条题解

  • 1
    @ 2026-8-28 12:05:13

    其实可以不转45度直接设一次方程解

    这里有 sub2 sub3 sub4的全部做法。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define int long long
    
    int aBs(int x){
    	if (x<0) return -x;
    	return x;
    }
    
    int n,m;
    struct node{
    	int x,y;
    }a[1000006];
    
    void main_solve1(){ //sub2
    	int anss=m+1;
    	for (int s=1;s<=m;s++){
    		int l=1,r=m,ans=m+1;
    		while (l<=r){
    			int mid=(l+r)>>1;
    			
    			int L=1,R=m;
    			for (int i=1;i<=n;i++){
    				if (aBs(a[i].x-a[i].y)<=mid) continue;
    				int diss=mid-aBs(s-a[i].x);
    				L=max(L,a[i].y-diss);
    				R=min(R,a[i].y+diss);
    			}
    			if (L<=R) r=mid-1,ans=mid;
    			else l=mid+1;
    		}
    		anss=min(anss,ans);
    	}
    	printf("%d\n",anss);
    	
    	return;
    }
    void main_solve2(){ //sub3
    	int ans=(aBs(a[1].x-a[2].x)+aBs(a[1].y-a[2].y)-1)/2 +1;
    	ans=min(ans, aBs(a[1].x-a[1].y));
    	ans=min(ans, aBs(a[2].x-a[2].y));
    	printf("%lld\n",ans);
    	return;
    }
    void main_solve(){ //正解
    	int l=1,r=m,ans=m+1;
    	while (l<=r){
    		int mid=(l+r)>>1;
    		
    		int xmin=0xc0c0c0c0c0c0c0c0,xmax=0x3f3f3f3f3f3f3f3f;
    		int ymin=0xc0c0c0c0c0c0c0c0,ymax=0x3f3f3f3f3f3f3f3f;
    		for (int i=1;i<=n;i++){
    			if (a[i].y-a[i].x<=mid) continue;
    			ymax=min(ymax, a[i].x-a[i].y+mid);
    			ymin=max(ymin, a[i].x-a[i].y-mid);
    			
    			xmax=min(xmax, a[i].x+a[i].y+mid);
    			xmin=max(xmin, a[i].x+a[i].y-mid);
    		}
    		if (xmin<=xmax && ymin<=ymax){
    			r=mid-1;
    			ans=mid;
    		}
    		else{
    			l=mid+1; 
    		}
    	}
    	printf("%lld\n",ans);
    	return;
    }
    
    signed main(){
    //	freopen("A.in","r",stdin);
    	scanf("%lld%lld",&n,&m);
    	for (int i=1;i<=n;i++){
    		scanf("%lld%lld",&a[i].x,&a[i].y);
    		if (a[i].x>a[i].y) swap(a[i].x,a[i].y);
    	}
    	if (n==2){
    		main_solve2();
    		return 0;
    	}
    	if (n<=1000 && m<=1000){
    		main_solve1();
    		return 0;
    	}
    	main_solve();
    	return 0;
    }
    

    信息

    ID
    807
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    42
    已通过
    3
    上传者