#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... |