#include <bits/stdc++.h>
using namespace std;
vector<int> ux = {0, -1, 0, 1}, uy = {1, 0, -1, 0}, dx = {0, -1, 0, 1},
dy = {-1, 0, 1, 0};
const int MAX_N = 50;
int mat[MAX_N][MAX_N], num_visited = 0, n, m, k, current_distance = 0;
void update_distance(int x, int y) {
if (x < 0 || x >= m || y < 0 || y >= n) return;
num_visited++;
mat[y][x] = min(mat[y][x], current_distance);
}
int main() {
cin >> n >> m >> k;
int x, y, z;
vector<int> tx, ty;
for (int i = 0; i < MAX_N; i++) {
for (int j = 0; j < MAX_N; j++) { mat[i][j] = 1e9; }
}
for (int i = 0; i < k; i++) {
cin >> x >> y >> z;
x--;
y--;
swap(x, y);
if (z == 0) {
tx = dx;
ty = dy;
} else {
tx = ux;
ty = uy;
}
int direction_index = 1;
int steps_len = 1;
int steps_left = 2;
current_distance = 1;
num_visited = 0;
update_distance(x, y);
while (true) {
if (num_visited >= n * m) break;
if (steps_left == 0) {
steps_len++;
steps_left = 2;
}
for (int va = 0; va < steps_len; va++) {
x += ty[direction_index];
y += tx[direction_index];
current_distance++;
update_distance(x, y);
}
steps_left--;
direction_index = (direction_index + 1) % 4;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) { cout << mat[i][j] << " \n"[j == m - 1]; }
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |