Submission #1235883

#TimeUsernameProblemLanguageResultExecution timeMemory
1235883santi3223Spirale (COCI18_spirale)C++20
80 / 80
787 ms600 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>> mp; vector<vl> minn; ll n, m; void clockwise(ll i, ll j, ll val){ mp[i][j] = 0; mp[i-1][j] = 1; mp[i][j+1] = 3; mp[i+1][j] = 5; mp[i][j-1] = 7; mp[i+2][j]= 18; ll q = 1; //cout << i << " " << j << ed; ff(y, i+1, n){ //abajo if(y >= i+2){ mp[y+1][j] = mp[y][j]+(mp[y][j]-mp[y-1][j]+8); } ll xx = q; ll id = j-1; while(xx > 0 && id >= 0){ //izq mp[y][id] = mp[y][id+1]+1; id--; xx--; } xx = q; id = j+1; while(xx > 0 && id < m){//der mp[y][id] = mp[y][id-1]-1; id++; xx--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ q = 1; for(ll y = i-1; y >= 0; y--){ //arriba mp[y-1][j] = mp[y][j]+(mp[y][j]-mp[y+1][j]+8); ll xx = q; ll id = j-1; while(xx > 0 && 0 <= id){ // izq mp[y][id] = mp[y][id+1]-1; id--; xx--; } xx = q+1; id = j+1; while(xx > 0 && id < m){ //der mp[y][id] = mp[y][id-1]+1; id++; xx--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ q = 1; ff(x, j+1, m){ //der mp[i][x+1] = mp[i][x]+(mp[i][x]-mp[i][x-1]+8); ll quant = q; ll id = i-1; while(quant > 0 && 0 <= id){ //arriba mp[id][x] = mp[id+1][x]-1; id--; quant--; } quant = q; id = i+1; while(quant > 0 && id < n){ //abajo mp[id][x] = mp[id-1][x]+1; id++; quant--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ q = 1; for(ll x = j-1; x >= 0; x--){ //izq mp[i][x-1] = mp[i][x]+(mp[i][x]-mp[i][x+1]+8); ll quant = q+1; ll id = i-1; while(quant > 0 && 0 <= id){//arriba mp[id][x] = mp[id+1][x]+1; id--; quant--; } quant = q; id = i+1; while(quant > 0 && id < n){ //abajo mp[id][x] = mp[id-1][x]-1; id++; quant--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ } void counter(ll i, ll j, ll val){ mp[i][j] = 0; mp[i-1][j] = 1; mp[i][j-1] = 3; mp[i+1][j] = 5; mp[i][j+1] = 7; mp[i+2][j] = 18; ll q = 1; ff(y, i+1, n){ //abajo if(y >= i+2){ mp[y+1][j] = mp[y][j]+(mp[y][j]-mp[y-1][j]+8); } ll xx = q; ll id = j-1; while(xx > 0 && id >= 0){ //izq mp[y][id] = mp[y][id+1]-1; id--; xx--; } xx = q; id = j+1; while(xx > 0 && id < m){//der mp[y][id] = mp[y][id-1]+1; id++; xx--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ q = 1; for(ll y = i-1; y >= 0; y--){ //arriba mp[y-1][j] = mp[y][j]+(mp[y][j]-mp[y+1][j]+8); ll xx = q+1; ll id = j-1; while(xx > 0 && 0 <= id){ // izq mp[y][id] = mp[y][id+1]+1; id--; xx--; } xx = q; id = j+1; while(xx > 0 && id < m){ //der mp[y][id] = mp[y][id-1]-1; id++; xx--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ q = 1; ff(x, j+1, m){ //der mp[i][x+1] = mp[i][x]+(mp[i][x]-mp[i][x-1]+8); ll quant = q+1; ll id = i-1; while(quant > 0 && 0 <= id){ //arriba mp[id][x] = mp[id+1][x]+1; id--; quant--; } quant = q; id = i+1; while(quant > 0 && id < n){ //abajo mp[id][x] = mp[id-1][x]-1; id++; quant--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ q = 1; for(ll x = j-1; x >= 0; x--){ //izq mp[i][x-1] = mp[i][x]+(mp[i][x]-mp[i][x+1]+8); ll quant = q; ll id = i-1; while(quant > 0 && 0 <= id){//arriba mp[id][x] = mp[id+1][x]-1; id--; quant--; } quant = q; id = i+1; while(quant > 0 && id < n){ //abajo mp[id][x] = mp[id-1][x]+1; id++; quant--; } q++; } /*ff(ii, 0, n){ ff(jj, 0, m){ cout << mp[ii][jj] << " "; if(mp[ii][jj] < 10){ cout << " "; } if(mp[ii][jj] < 100){ cout << " "; } } cout << ed; } cout << ed << ed;*/ } 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--; mp.clear(); if(c == 0){ //cout << "CLOCK" << ed; clockwise(a, b, 0); } else{ counter(a, b, 0); } ff(ii, 0, n){ ff(jj, 0, m){ //cout << mp[ii][jj] << " "; minn[ii][jj] = min(minn[ii][jj], mp[ii][jj]); } //cout << ed; } //cout << ed; } ff(i, 0, n){ ff(j, 0, m){ cout << minn[i][j]+1 << " "; } cout << ed; } }
#Verdict Execution timeMemoryGrader output
Fetching results...