Submission #877089

#TimeUsernameProblemLanguageResultExecution timeMemory
877089parlimoosFurniture (JOI20_furniture)C++14
100 / 100
170 ms12912 KiB
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
#define pb push_back
#define pp pop_back
#define cl clear
#define bg begin
#define lb lower_bound
#define ub upper_bound
#define arr(x) array<int , x>
#define endl '\n'

int n , m , q;
bool mat[1000][1000];
int rcnt[2000];

void del(int i , int j){
    // cout << i << " " << j << "::\n";
    bool shrt = (i >= 0 and j >= 0 and i <= n - 1 and j <= m - 1);
    shrt = (shrt and (!mat[i][j] and (i != 0 or j != 0) and (i != n - 1 or j != m - 1)));
    if(shrt){
        rcnt[i + j]--;
        mat[i][j] = true;
        if(i == 0) del(i , j + 1);
        else if(i == n - 1) del(i , j - 1);
        if(j == 0) del(i + 1 , j);
        else if(j == m - 1) del(i - 1 , j);

        if(i + 1 <= n - 1 and j - 1 >= 0 and mat[i + 1][j - 1]) del(i , j - 1) , del(i + 1 , j);
        if(i - 1 >= 0 and j + 1 <= m - 1 and mat[i - 1][j + 1]) del(i - 1 , j) , del(i , j + 1);
    }
}
void printMat(){
    for(int i = 0 ; i < n ; i++){
        for(int j = 0 ; j < m ; j++) cout << mat[i][j] << " ";
        cout << endl;
    }
    cout << flush;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;
    for(int i = 0 ; i < n ; i++) for(int j = 0 ; j < m ; j++) rcnt[i + j]++;
    for(int i = 0 ; i < n ; i++){
        for(int j = 0 ; j < m ; j++){
            bool d;
            cin >> d;
            if(d) del(i , j);
        }
    }
    // printMat();

    cin >> q;
    for(int i = 0 ; i < q ; i++){
        int x , y;
        cin >> x >> y;
        x-- , y--;
        if(rcnt[x + y] == 1 and !mat[x][y]) cout << "0\n";
        else{
            cout << "1\n";
            del(x , y);
        }
        // printMat();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...