이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9+9;
const ll LOGN = 30;
const ll MAXN = 1100;
int path[MAXN][MAXN];
int cnt[2*MAXN], N, M;
void deactivate(int row, int col) {
path[row][col] = 0;
cnt[row+col]--;
if (row - 1 >= 1 && path[row-1][col] && path[row-1][col+1] == 0)
deactivate(row-1, col);
if (col - 1 >= 1 && path[row][col-1] && path[row+1][col-1] == 0)
deactivate(row, col-1);
if (row + 1 <= N && path[row+1][col] && path[row+1][col-1] == 0)
deactivate(row+1, col);
if (col + 1 <= M && path[row][col+1] && path[row-1][col+1] == 0)
deactivate(row, col+1);
}
bool add(int row, int col) {
if (cnt[row+col] == 1 && path[row][col])
return false;
if (path[row][col] == 0)
return true;
deactivate(row, col);
return true;
}
int main() {
fast
cin >> N >> M;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++)
path[i][j] = true;
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++)
cnt[i+j]++;
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
int x; cin >> x;
if (x)
add(i, j);
}
}
int Q;
cin >> Q;
while (Q--) {
int row, col;
cin >> row >> col;
if (add(row, col))
cout << "1\n";
else
cout << "0\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |