Submission #930892

# Submission time Handle Problem Language Result Execution time Memory
930892 2024-02-20T15:23:53 Z phoenix0423 Furniture (JOI20_furniture) C++17
100 / 100
198 ms 51504 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
typedef pair<int, int> pll;
#define fastio ios::sync_with_stdio(false), cin.tie(0)
#define pb push_back
#define eb emplace_back
#define f first
#define s second
#define lowbit(x) x&-x;
const int maxn = 1005;
const int maxq = 1e6 + 5;
const int INF = 1e18;
int c[maxn][maxn];
int st[maxn][maxn];
pll coord[maxq];
int cnt[maxn * 2];
int ans[maxq];
int n, m, q;
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
bool inbound(int x, int y){ return x >= 0 && y >= 0 && x < n && y < m;}

void remove(int x, int y){
    if(!st[x][y]) return;
    st[x][y] = 0, cnt[x + y] --;
    queue<pll> q;
    q.push({x, y});
    while(!q.empty()){
        auto [cx, cy] = q.front(); q.pop();
        for(int d = 2; d < 4; d++){
            int xx = cx + dx[d], yy = cy + dy[d];
            if(!inbound(xx, yy) || !st[xx][yy]) continue;
            if(!st[xx + 1][yy] && !st[xx][yy + 1]){
                cnt[xx + yy] --;
                st[xx][yy] = 0;
                q.push({xx, yy});
            }
        }
    }
    q.push({x, y});
    while(!q.empty()){
        auto [cx, cy] = q.front(); q.pop();
        for(int d = 0; d < 2; d++){
            int xx = cx + dx[d], yy = cy + dy[d];
            if(!inbound(xx, yy) || !st[xx][yy]) continue;
            int bad = (xx == 0 || !st[xx - 1][yy]) + (yy == 0 || !st[xx][yy - 1]);
            if(bad == 2){
                cnt[xx + yy] --;
                st[xx][yy] = 0;
                q.push({xx, yy});
            }
        }
    }
}

signed main(void){
    fastio;
    cin>>n>>m;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++) cin>>c[i][j];
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++) st[i][j] = 1, cnt[i + j] ++;
    }
    cin>>q;
    for(int i = 0; i < q; i++){
        cin>>coord[i].f>>coord[i].s;
        coord[i].f--, coord[i].s--;
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(c[i][j]){
                remove(i, j);
            }
        }
    }
    for(int i = 0; i < q; i++){
        auto [x, y] = coord[i];
        if(st[x][y] && cnt[x + y] == 1) continue;
        if(st[x][y]) remove(x, y);
        ans[i] = 1;
    }
    for(int i = 0; i < q; i++) cout<<ans[i]<<"\n";
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 2 ms 6492 KB Output is correct
3 Correct 2 ms 6492 KB Output is correct
4 Correct 3 ms 6748 KB Output is correct
5 Correct 3 ms 6748 KB Output is correct
6 Correct 3 ms 6748 KB Output is correct
7 Correct 3 ms 6748 KB Output is correct
8 Correct 3 ms 6748 KB Output is correct
9 Correct 3 ms 6748 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 2 ms 6492 KB Output is correct
3 Correct 2 ms 6492 KB Output is correct
4 Correct 3 ms 6748 KB Output is correct
5 Correct 3 ms 6748 KB Output is correct
6 Correct 3 ms 6748 KB Output is correct
7 Correct 3 ms 6748 KB Output is correct
8 Correct 3 ms 6748 KB Output is correct
9 Correct 3 ms 6748 KB Output is correct
10 Correct 8 ms 9052 KB Output is correct
11 Correct 3 ms 6488 KB Output is correct
12 Correct 116 ms 29780 KB Output is correct
13 Correct 48 ms 20680 KB Output is correct
14 Correct 179 ms 46796 KB Output is correct
15 Correct 185 ms 49232 KB Output is correct
16 Correct 183 ms 50004 KB Output is correct
17 Correct 196 ms 50804 KB Output is correct
18 Correct 198 ms 50496 KB Output is correct
19 Correct 196 ms 51284 KB Output is correct
20 Correct 192 ms 51164 KB Output is correct
21 Correct 198 ms 51504 KB Output is correct