제출 #757625

#제출 시각아이디문제언어결과실행 시간메모리
757625HanksburgerFurniture (JOI20_furniture)C++17
100 / 100
372 ms15932 KiB
#include <bits/stdc++.h>
using namespace std;
int a[1005][1005], cnt[2005], visited[1005][1005], n, m, o;
queue<pair<int, int> > q;
int f(int x, int y)
{
    return (1<=x && x<=n && 1<=y && y<=m);
}
void g()
{
    while (!q.empty())
    {
        int ux=q.front().first, uy=q.front().second;
        q.pop();
        if (a[ux-1][uy+1])
        {
            if (f(ux-1, uy) && !a[ux-1][uy])
            {
                a[ux-1][uy]=1;
                cnt[ux+uy-1]--;
                q.push({ux-1, uy});
            }
            if (f(ux, uy+1) && !a[ux][uy+1])
            {
                a[ux][uy+1]=1;
                cnt[ux+uy+1]--;
                q.push({ux, uy+1});
            }
        }
        if (a[ux+1][uy-1])
        {
            if (f(ux+1, uy) && !a[ux+1][uy])
            {
                a[ux+1][uy]=1;
                cnt[ux+uy+1]--;
                q.push({ux+1, uy});
            }
            if (f(ux, uy-1) && !a[ux][uy-1])
            {
                a[ux][uy-1]=1;
                cnt[ux+uy-1]--;
                q.push({ux, uy-1});
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i=0; i<=m+1; i++)
        a[0][i]=a[n+1][i]=1;
    for (int i=0; i<=n+1; i++)
        a[i][0]=a[i][m+1]=1;
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=m; j++)
        {
            cin >> a[i][j];
            if (a[i][j])
                q.push({i, j});
            else
                cnt[i+j]++;
        }
    }
    g();
    cin >> o;
    for (int i=1; i<=o; i++)
    {
        int x, y;
        cin >> x >> y;
        if (a[x][y])
            cout << 1 << '\n';
        else if (cnt[x+y]==1)
            cout << 0 << '\n';
        else
        {
            cout << 1 << '\n';
            a[x][y]=1;
            cnt[x+y]--;
            q.push({x, y});
            g();
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...