蒟蒻暴力15分求调
查看原帖
蒟蒻暴力15分求调
759438
ruirui114514楼主2024/10/20 19:25
#include <bits/stdc++.h>
using namespace std;
#define int long long

int n,m,q,r,k,cnt=1;
int a[3001][3001];
int b[3001][3001];

void pt();

bool check(int x,int y) {
    if(a[x][y]>0||a[x][y]==-1) return false;
    int xx[]={0,0,-1,1},yy[]={-1,1,0,0};
    bool flag=0,flag2=0;
    for(int i=0;i<4;i++) {
        int nx=x+xx[i];
        int ny=y+yy[i];
        if(nx<1||nx>n||ny<1||ny>m) continue;
        if(a[nx][ny]==-1) flag=1;
        else if(a[nx][ny]>0) flag2=1;
    }
    if(flag&&flag2) return true;
    return false;
}

bool check2(int x,int y) {
    bool flag=0;
    int xx[]={0,0,-1,1},yy[]={-1,1,0,0};
    for(int i=0;i<4;i++) {
        int nx=x+xx[i];
        int ny=y+yy[i];
        if(nx<1||nx>n||ny<1||ny>m) continue;
        if(a[nx][ny]>0) flag=1;
    }
    return flag;
}

bool update(int t) {
    bool did_update=0;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            b[i][j]=a[i][j];
        }
    }
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            if(check(i,j)) b[i][j]=t,did_update=1;
            if(a[i][j]>0&&t-a[i][j]>=k) {
                if(!check2(i,j)) {
                    b[i][j]=0;
                    did_update=1;
                }
            }
        }
    }
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            a[i][j]=b[i][j];
        }
    }
    //pt();
    return did_update;
}



signed main() {
    //freopen("lake3.in","r",stdin);
    //freopen("lake3.out","w",stdout);
    memset(a,0,sizeof(a));
    cin>>n>>m>>q>>r>>k;
    for(int i=1,x1,y1,x2,y2;i<=q;i++) {
        cin>>x1>>y1>>x2>>y2;
        if(x1>x2) swap(x1,x2);
        if(y1>y2) swap(y1,y2);
        for(int r=x1;r<=x2;r++)
            for(int c=y1;c<=y2;c++) a[r][c]=-1;
    }
    for(int i=1,t,x,y;i<=r;i++) {
        cin>>t>>x>>y;
        for(int j=cnt;j<t;j++) update(j);
        a[x][y]=t;
        cnt=t;
    }
    for(int i=cnt,last=0;last<100||i<=cnt+k+2;i++) {
        if(!update(i)) last++;
        else last=0;
    }
    int ans=0;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            if(a[i][j]>0) {
                ans++;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

void pt() {
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            cout<<" "<<a[i][j];
        }
        cout<<endl;
    }
    cout<<endl;
    return ;
}
2024/10/20 19:25
加载中...