제출 #1217956

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