제출 #1159984

#제출 시각아이디문제언어결과실행 시간메모리
1159984nguyenkhangninh99Spirale (COCI18_spirale)C++20
80 / 80
42 ms328 KiB
#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 timeMemoryGrader output
Fetching results...