Submission #1223024

#TimeUsernameProblemLanguageResultExecution timeMemory
1223024AlgorithmWarriorFurniture (JOI20_furniture)C++20
100 / 100
1108 ms4428 KiB
#include <bits/stdc++.h>

using namespace std;

int const NMAX=1005;
bool drum1[NMAX][NMAX],drum2[NMAX][NMAX];
int n,m;

void read(){
    cin>>n>>m;
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j){
            bool val;
            cin>>val;
            drum1[i][j]=drum2[i][j]=!val;
        }
}

int diag[2*NMAX];

bool check1(int l,int c){
    return (drum1[l-1][c]|drum1[l][c-1]);
}

bool check2(int l,int c){
    return (drum2[l+1][c]|drum2[l][c+1]);
}

void init(){
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            if(drum1[i][j] && !(i==1 && j==1))
                drum1[i][j]=check1(i,j);
    for(i=n;i;--i)
        for(j=m;j;--j)
            if(drum2[i][j] && !(i==n && j==m))
                drum2[i][j]=check2(i,j);
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            if(drum1[i][j] && drum2[i][j])
                ++diag[i+j];
}

void deactivate1(int l,int c){
    if(drum2[l][c])
        --diag[l+c];
    drum1[l][c]=0;
    if(drum1[l+1][c] && !check1(l+1,c))
        deactivate1(l+1,c);
    if(drum1[l][c+1] && !check1(l,c+1))
        deactivate1(l,c+1);
}

void deactivate2(int l,int c){
    if(drum1[l][c])
        --diag[l+c];
    drum2[l][c]=0;
    if(drum2[l-1][c] && !check2(l-1,c))
        deactivate2(l-1,c);
    if(drum2[l][c-1] && !check2(l,c-1))
        deactivate2(l,c-1);
}

void process_queries(){
    int q;
    cin>>q;
    while(q--){
        int l,c;
        cin>>l>>c;
        if(drum1[l][c] && drum2[l][c] && diag[l+c]==1){
            cout<<0<<'\n';
            continue;
        }
        cout<<1<<'\n';
        if(drum1[l][c])
            deactivate1(l,c);
        if(drum2[l][c])
            deactivate2(l,c);
    }
}

int main()
{
    read();
    init();
    process_queries();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...