Submission #1235495

#TimeUsernameProblemLanguageResultExecution timeMemory
1235495santi3223Spirale (COCI18_spirale)C++20
72 / 80
1095 ms2120 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vb vector<bool> #define pb push_back #define ff(aa, bb, cc) for(ll aa = bb; aa < cc; aa++) #define vl vector<ll> #define pll pair<ll, ll> #define fi first #define se second #define ed "\n" #define all(aaa) aaa.begin(), aaa.end() #define rall(aaa) aaa.rbegin(), aaa.rend() ll MOD = 1e9+7; map<ll, map<ll, ll>> visited; vector<vl> minn; ll tot = 0, n, m; void clockwise(ll i, ll j, bool v, ll val){ visited[i][j] = true; if(tot >= n*m){ return; } if(0 <= i && i < n && 0 <= j && j < m){ minn[i][j] = min(minn[i][j], val); tot++; } if(val == 0){ clockwise(i-1, j, false, val+1); } else if(!v){ if(visited[i+1][j]){ clockwise(i, j+1, v, val+1); } else if(visited[i-1][j]){ clockwise(i, j-1, v, val+1); } else if(visited[i][j+1]){ clockwise(i-1, j, !v, val+1); } else{ clockwise(i+1, j, !v, val+1); } } else{ if(visited[i][j-1]){ clockwise(i+1, j, v, val+1); } else if(visited[i][j+1]){ clockwise(i-1, j, v, val+1); } else if(visited[i-1][j]){ clockwise(i, j-1, !v, val+1); } else{ clockwise(i, j+1, !v, val+1); } } } void counter(ll i, ll j, bool v, ll val){ visited[i][j] = true; if(tot >= n*m){ return; } if(0 <= i && i < n && 0 <= j && j < m){ minn[i][j] = min(minn[i][j], val); tot++; } if(val == 0){ counter(i-1, j, false, val+1); } else if(!v){ if(visited[i+1][j]){ counter(i, j-1, v, val+1); } else if(visited[i-1][j]){ counter(i, j+1, v, val+1); } else if(visited[i][j+1]){ counter(i+1, j, !v, val+1); } else{ counter(i-1, j, !v, val+1); } } else{ if(visited[i][j+1]){ counter(i+1, j, v, val+1); } else if(visited[i][j-1]){ counter(i-1, j, v, val+1); } else if(visited[i+1][j]){ counter(i, j-1, !v, val+1); } else{ counter(i, j+1, !v, val+1); } } } int main() { ll q; cin >> n >> m >> q; minn = vector<vl>(n, vl(m, LLONG_MAX)); while(q--){ ll a, b, c; cin >> a >> b >> c; a--; b--; visited.clear(); tot = 0; if(c == 0){ //cout << "CLOCK" << ed; clockwise(a, b, true, 0); } else{ counter(a, b, true, 0); } } ff(i, 0, n){ ff(j, 0, m){ cout << minn[i][j]+1 << " "; } cout << ed; } }
#Verdict Execution timeMemoryGrader output
Fetching results...