1 条题解

  • 0
    @ 2025-10-3 15:45:03

    https://www.luogu.com.cn/problem/solution/P8404

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn=1e2+7,inf=0x3f3f3f3f;
    int n,m,l,r,u,d,ans=-inf;
    struct node{
    	int x,y;
    }p[maxn];
    
    bool dcmp(node x,node y){
    	return x.x==y.x?x.y<y.y:x.x<y.x;
    }
    
    bool lcmp(node x,node y){
    	return x.y==y.y?x.x<y.x:x.y<y.y;
    }
    
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++) scanf("%d%d",&p[i].x,&p[i].y);
    	p[++m]=(node){0,0},p[++m]=(node){0,n+1},p[++m]=(node){n+1,0},p[++m]=(node){n+1,n+1};
    	sort(p+1,p+1+m,dcmp);
    	for(int i=1;i<=m;i++){
    		l=1,r=n;
    		for(int j=i+1;j<=m;j++){
    			if(r-l+1<p[j].x-p[i].x-1) break;
    			ans=max(ans,p[j].x-p[i].x-1);
    			if(l<=p[j].y&&p[j].y<=p[i].y) l=p[j].y+1;
    			else if(r>=p[j].y&&p[j].y>p[i].y) r=p[j].y-1;
    		}
    	}
    	sort(p+1,p+1+m,lcmp);
    	for(int i=1;i<=m;i++){
    		u=1,d=n;
    		for(int j=i+1;j<=m;j++){
    			if(d-u+1<p[j].y-p[i].y-1) break;
    			ans=max(ans,p[j].y-p[i].y-1);
    			if(u<=p[j].x&&p[j].x<=p[i].x) u=p[j].x+1;
    			else if(d>=p[j].x&&p[j].x>p[i].x) d=p[j].x-1;
    		}
    	}
    	printf("%d",ans);
    	return 0;
    }
    
    
    • 1

    信息

    ID
    111
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    47
    已通过
    2
    上传者