#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <unordered_set>
#include <complex>
#include <list>
#include <cassert>
#include <chrono>
#include <random>
#include <stack>
#include <iomanip>
#include <fstream>
using namespace std;
#define endl "\n"
// #define int long long
const int INF = 1e9+7;
const int MOD = 1e9+7;
const int MAXN = 55;
int n, m, k;
vector<vector<int>> sol(MAXN+1, vector<int>(MAXN+1, INF));
vector<int> moves;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
// U, R, D, L
bool valid(int x, int y){
return (x >= 1 && y >= 1 && x <= n && y <= m);
}
void spirale(int x, int y, int dir){
int curr = 1;
for(int i = 0; i < moves.size(); i++){
int d = i%4;
if(dir == 1) d *= -1;
d = (d+4)%4;
for(int j = 0; j < moves[i]; j++){
x += dx[d];
y += dy[d];
curr++;
if(valid(x, y)){
sol[x][y] = min(sol[x][y], curr);
}
}
}
}
void solve(){
for(int i = 1; i <= 100; i++){
moves.push_back(i);
moves.push_back(i);
}
cin >> n >> m >> k;
while(k--){
int x, y, dir;
cin >> x >> y >> dir;
sol[x][y] = 1;
spirale(x, y, dir);
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cout << sol[i][j] << " ";
}
cout << endl;
}
}
int32_t main(){
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int t = 1;
// cin >> t;
while(t--) solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |