제출 #1236556

#제출 시각아이디문제언어결과실행 시간메모리
1236556yashasvaTracks in the Snow (BOI13_tracks)C++20
2.19 / 100
2103 ms350220 KiB
#include <bits/stdc++.h> using namespace std; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; int solve(vector<vector<char>>& grid, char cur){ int n = grid.size(); int m = grid[0].size(); deque<vector<int>> dq; vector<vector<int>> d(n, vector<int>(m, n * m + 1)); if(grid[0][0] == cur){ dq.push_front({0, 0, 0, cur - 'A'}); d[0][0] = 0; } else { dq.push_back({0, 0, 1, grid[0][0] - 'A'}); d[0][0] = 1; } while(!dq.empty()){ vector<int> curr = dq.front(); dq.pop_front(); for(int i = 0; i < 4; i++){ int X = curr[0] + dx[i]; int Y = curr[1] + dy[i]; if(X >= n || X < 0 || Y >= m || Y < 0) continue; int cost = 0; if(grid[X][Y] != curr[3]){ cost = 1; } if(cost + d[curr[0]][curr[1]] < d[X][Y]){ d[X][Y] = cost + d[curr[0]][curr[1]]; if(cost == 0) dq.push_front({X, Y, d[X][Y], curr[3]}); else dq.push_back({X, Y, d[X][Y], grid[X][Y]}); } } } return d[n - 1][m - 1]; } int main(){ int n, m; cin >> n >> m; vector<vector<char>> grid(n, vector<char>(m)); bool r = 0; bool f = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin >> grid[i][j]; if(grid[i][j] == 'F') f = 1; if(grid[i][j] == 'R') r = 1; } } if(r == 0 || f == 0){ cout << 1 << "\n"; return 0; } cout << max(solve(grid, 'F'), solve(grid, 'R')) << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...