Submission #1278123

#TimeUsernameProblemLanguageResultExecution timeMemory
1278123mdobricPortals (BOI14_portals)C++20
0 / 100
3 ms4420 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1005; int n, m; char c[maxn][maxn]; int iduci[maxn][maxn][4], pocx, pocy, krajx, krajy, bio[maxn][maxn]; queue <pair <int, int> > q; int pomakx[4] = {-1, 1, 0, 0}; int pomaky[4] = {0, 0, -1, 1}; int main (void){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ cin >> c[i][j]; if (c[i][j] == 'S') pocx = i, pocy = j; if (c[i][j] == 'C') krajx = i, krajy = j; } } for (int j = 0; j < m; j++){ int prosli = -1; for (int i = 0; i < n; i++){ iduci[i][j][0] = prosli; if (c[i][j] == '#') prosli = i; } } for (int j = 0; j < m; j++){ int prosli = n; for (int i = n - 1; i >= 0; i--){ iduci[i][j][1] = prosli; if (c[i][j] == '#') prosli = i; } } for (int i = 0; i < n; i++){ int prosli = -1; for (int j = 0; j < m; j++){ iduci[i][j][2] = prosli; if (c[i][j] == '#') prosli = j; } } for (int i = 0; i < n; i++){ int prosli = m; for (int j = m - 1; j >= 0; j--){ iduci[i][j][3] = prosli; if (c[i][j] == '#') prosli = j; } } memset(bio, -1, sizeof bio); bio[pocx][pocy] = 0; q.push({pocx, pocy}); while (!q.empty()){ int x = q.front().first; int y = q.front().second; q.pop(); for (int i = 0; i < 4; i++){ int novix = pomakx[i] + x; int noviy = pomaky[i] + y; if (novix >= 0 and novix < n and noviy >= 0 and noviy < m and bio[novix][noviy] == -1 and c[novix][noviy] != '#'){ q.push({novix, noviy}); bio[novix][noviy] = bio[x][y] + 1; } } if (x == 0 or c[x - 1][y] == '#'){ int novix = iduci[x][y][1] - 1; int noviy = y; if (bio[novix][noviy] == -1){ q.push({novix, noviy}); bio[novix][noviy] = bio[x][y] + 1; } } if (x == n - 1 or c[x + 1][y] == '#'){ int novix = iduci[x][y][0] + 1; int noviy = y; if (bio[novix][noviy] == -1){ q.push({novix, noviy}); bio[novix][noviy] = bio[x][y] + 1; } } if (y == 0 or c[x][y - 1] == '#'){ int novix = iduci[x][y][3] - 1; int noviy = y; if (bio[novix][noviy] == -1){ q.push({novix, noviy}); bio[novix][noviy] = bio[x][y] + 1; } } if (y == m - 1 or c[x][y + 1] == '#'){ int novix = iduci[x][y][2] + 1; int noviy = y; if (bio[novix][noviy] == -1){ q.push({novix, noviy}); bio[novix][noviy] = bio[x][y] + 1; } } } cout << bio[krajx][krajy] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...