Submission #1156585

#TimeUsernameProblemLanguageResultExecution timeMemory
1156585Hamed_GhaffariFurniture (JOI20_furniture)C++20
100 / 100
144 ms3420 KiB
#include<bits/stdc++.h>
using namespace std;

const int MXN = 1003;

int n, m, q;
int cnt[MXN+MXN];
bool mark[MXN][MXN];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

bool SC(int i, int j) {
    if(i<1 || i>n || j<1 || j>m || mark[i][j] || (i==1 && j==1) || (i==n && j==m)) return 0;
    if((i==1 || mark[i-1][j]) && (j==1 || mark[i][j-1])) return 1;
    if((i==n || mark[i+1][j]) && (j==m || mark[i][j+1])) return 1;
    return 0;
}

void dfs(int i, int j) {
    if(!SC(i, j)) return;
    mark[i][j] = 1;
    cnt[i+j]--;
    for(int d=0; d<4; d++)
        dfs(i+dx[d], j+dy[d]);
}

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++) {
            cin >> mark[i][j];
            cnt[i+j] += 1-mark[i][j];
        }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            dfs(i, j);
    cin >> q;
    while(q--) {
        int i, j;
        cin >> i >> j;
        if(mark[i][j]) {
            cout << "1\n";
            continue;
        }
        if(cnt[i+j]>1) {
            cout << "1\n";
            mark[i][j] = 1; cnt[i+j] --;
            for(int d=0; d<4; d++)
                dfs(i+dx[d], j+dy[d]);
        }
        else cout << "0\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...