Submission #1129330

#TimeUsernameProblemLanguageResultExecution timeMemory
1129330subham_krrTracks in the Snow (BOI13_tracks)C++20
2.19 / 100
2101 ms142424 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main() { int n, m; cin >> n >> m; int r=0,f=0; vector<vector<char> > g(n, vector<char>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> g[i][j]; if(g[i][j]=='R') {r++; } else if(g[i][j]=='F') {f++; } } } // Define direction vectors for 4 directions // vector<pair<int, int> > v = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; vector<pair<int,int > >v; v.push_back({-1,0}); v.push_back({0,-1}); v.push_back({0,1}); v.push_back({1,0}); // Initialize the level array vector<vector<int> > level(n, vector<int>(m, LLONG_MAX)); level[0][0] = 0; // BFS queue queue<pair<int, int> > q; q.push({0, 0}); while (!q.empty()) { pair<int, int> p = q.front(); q.pop(); for (int i = 0; i < 4; i++) { int d = p.first + v[i].first; int e = p.second + v[i].second; // Boundary check if (d >= 0 && d < n && e >= 0 && e < m && g[d][e]!='.') { int wt = (g[p.first][p.second] != g[d][e]) ? 1 : 0; if (wt + level[p.first][p.second] < level[d][e]) { level[d][e] = wt + level[p.first][p.second]; q.push({d, e}); // Push valid neighbor } } } } //if(level[n-1][m-1]==0) //{ // level[n-1][m-1]=(f!=0)+(r!=0); //} // // Output the shortest path weight to the bottom-right corner cout << level[n-1][m-1] +(f!=0)+(r!=0)<< endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...