93求助
查看原帖
93求助
1041251
luo_han楼主2023/7/31 11:21

93求助

错误样例11

代码:

#include<bits/stdc++.h>
#define re register
#define rep(i,a,b) for (re int i=(a);i<=(b);i++)
#define drep(i,a,b) for (re int i=(a);i>=(b);i--)
using namespace std;
const int N=5e3+7;
struct Cow{
    int x,y;
    inline bool operator < (const Cow &rhs) const {
        if (x!=rhs.x)return x<rhs.x;
        return y<rhs.y;
    }
}a[N];
int L,W,n;
inline bool cmp(Cow a,Cow b){
    return a.y<b.y;
}
inline int read(){
    re int x=0,f=1;char ch=getchar();
    while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
    while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return x*f;
}
int main(){
    L=read(),W=read(),n=read();
    rep(i,1,n)a[i].x=read(),a[i].y=read();
    a[++n].x=0;a[n].y=0;
    a[++n].x=L;a[n].y=0;
    a[++n].x=0;a[n].y=W;
    a[++n].x=L;a[n].y=W;
    sort(a+1,a+n+1);
    int res=0;
    rep(i,1,n){
        re int h=W,l=0,v=L-a[i].x;
        rep(j,i+1,n)if (a[j].y<=h && a[j].y>=l){
            if (v*(h-l)<=res)break;
            res=max(res,(a[j].x-a[i].x)*(h-l));
            if (a[j].y==a[i].y)break;
            if (a[j].y>a[i].y)h=min(h,a[j].y);
            else l=max(l,a[j].y);
        }
        h=W,l=0,v=a[i].x;
        drep(j,i-1,1)
            if (a[j].y<=h && a[j].y>=l){
            if (v*(h-l)<=res)break;
            res=max(res,(a[i].x-a[j].x)*(h-l));
            if (a[i].y==a[j].y)break;
            if (a[j].y>a[i].y)h=min(h,a[j].y);
            else l=max(l,a[j].y);
        }
    }
    sort(a+1,a+n+1,cmp);
    rep(i,1,n-1)res=max(res,(a[i+1].y-a[i].y)*L);
    printf("%d",res);
    return 0;
}
2023/7/31 11:21
加载中...