제출 #1235481

#제출 시각아이디문제언어결과실행 시간메모리
1235481porquenomedejainiciarsesionSpirale (COCI18_spirale)C++20
0 / 80
1095 ms1796 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define f first #define s second #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() typedef pair<ll,ll> pll; typedef pair<int,int> pii; typedef map<int,int> mii; typedef map<ll,ll> mll; typedef unordered_map<ll,ll> umll; typedef set<ll> sl; typedef unordered_set<ll> usl; typedef vector<ll> vl; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<vl> vvl; typedef vector<pii> vpii; typedef vector<pll> vpll; typedef vector<vpii> vvpii; typedef vector<vpll> vvpll; typedef vector<vvi> vvvi; typedef vector<vvl> vvvl; map<int,map<int,int>> M; vector<vector<int>> V; int n,m,k; int con=0; void espiral(int i,int j,int a,int valor){ M[i][j]=1; if(con>=n*m-1){ return; } if(i>=0 && i<n && j>=0 && j<m){ V[i][j]=min(V[i][j],valor); con++; } if(a==0){ if(M[i][j+1]==0){ espiral(i,j+1,1,valor+1); return; }else{ espiral(i-1,j,0,valor+1); return; } }else if(a==1){ if(M[i+1][j]==0){ espiral(i+1,j,2,valor+1); return; }else{ espiral(i,j+1,1,valor+1); } }else if(a==2){ if(M[i][j-1]==0){ espiral(i,j-1,3,valor+1); }else{ espiral(i+1,j,2,valor+1); } }else{ if(M[i-1][j]==0){ espiral(i-1,j,0,valor+1); }else{ espiral(i,j-1,3,valor+1); } } } void espiral2(int i, int j, int a, int valor) { M[i][j] = 1; if (con >= n * m - 1) { return; } if (i >= 0 && i < n && j >= 0 && j < m) { V[i][j] = min(V[i][j], valor); con++; } if(a==0){ if(M[i][j-1]==0){ espiral2(i,j-1,1,valor+1); return; }else{ espiral2(i-1,j,0,valor+1); return; } }else if(a==1){ if(M[i+1][j]==0){ espiral2(i+1,j,2,valor+1); return; }else{ espiral2(i,j-1,1,valor+1); } }else if(a==2){ if(M[i][j+1]==0){ espiral2(i,j+1,3,valor+1); }else{ espiral2(i+1,j,2,valor+1); } }else{ if(M[i-1][j]==0){ espiral2(i-1,j,0,valor+1); }else{ espiral2(i,j+1,3,valor+1); } } } int main(){ cin>>n>>m>>k; V.assign(n,vector<int>(m,100)); for(int i=0;i<k;i++){ int a,b,c; cin>>a>>b>>c; a--; b--; M.clear(); con=0; if(c==0){ M[a][b]=1; V[a][b]=1; espiral(a-1,b,0,2); }else{ M[a][b]=1; V[a][b]=1; espiral2(a-1,b,0,2); } } for(auto x:V){ for(auto y:x){ cout<<y<<" "; } cout<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...