제출 #1344750

#제출 시각아이디문제언어결과실행 시간메모리
1344750warrennFurniture (JOI20_furniture)C++20
0 / 100
2 ms836 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back
#pragma GCC optimize("O3,unroll-loops")

int n,m;
int c[1002][1002];
bool vis[1002][1002];
int cnt[2004];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};

bool ins(int x,int y){
    return (x>0 && y>0 && x<=n && y<=m);
}

int cek(int x,int y){
    return !(ins(x,y) && !vis[x][y]);
}

void bfs(int a,int b){
    queue<pair<int,int> >qu;
    qu.push({a,b});

    while(qu.size()){
        auto [x,y]=qu.front(); qu.pop();
        vis[x][y]=true;
        cnt[x+y]--;

        for(int q=0;q<4;q++){
            int nx=x+dx[q],ny=y+dy[q];
            if(!ins(nx,ny) || vis[nx][ny])continue;
            if(nx==1 && ny==1)continue;
            if(nx==n && ny==m)continue;

            if(cek(nx-1,ny) && cek(nx,ny-1)){
                vis[nx][ny]=true;
                qu.push({nx,ny}); continue;
            }
            if(cek(nx+1,ny) && cek(nx,ny+1)){
                vis[nx][ny]=true;
                qu.push({nx,ny}); continue;
            }
        }
    }
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int q=1;q<=n;q++){
        for(int w=1;w<=m;w++){
            cin>>c[q][w];
            cnt[q+w]++;
        }
    }

    for(int q=1;q<=n;q++){
        for(int w=1;w<=m;w++){
            if(c[q][w])bfs(q,w);
        }
    }
    
    int qu;
    cin>>qu;
    while(qu--){
        int x,y; cin>>x>>y;
        if(vis[x][y] || cnt[x+y]>1){
            cout<<1<<endl;
            bfs(x,y);
        }
        else{
            cout<<0<<endl;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...