Submission #1284294

#TimeUsernameProblemLanguageResultExecution timeMemory
1284294crunchymonTracks in the Snow (BOI13_tracks)C++20
0 / 100
1578 ms1114112 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int #define all(v) v.begin(),v.end() #define pb push_back void dfsF1(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){ // cout<<"hello"; int ans = false; for (auto [x , y] : edges){ int xx = x + i; int yy = y + j; if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.' && grid[xx][yy] != 'R'){ grid[xx][yy] = 'R'; dfsF1(xx , yy , grid , edges); } } } void dfsF2(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){ // cout<<"hello"; int ans = false; for (auto [x , y] : edges){ int xx = x + i; int yy = y + j; if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.'){ grid[xx][yy] = '.'; dfsF2(xx , yy , grid , edges); } } } void dfsR1(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){ int ans = false; for (auto [x , y] : edges){ int xx = x + i; int yy = y + j; if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.' && grid[xx][yy] != 'F'){ grid[xx][yy] = 'F'; dfsR1(xx , yy , grid , edges); } } } void dfsR2(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){ int ans = false; for (auto [x , y] : edges){ int xx = x + i; int yy = y + j; if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.'){ grid[xx][yy] = '.'; dfsR2(xx , yy , grid , edges); } } } void solve(){ int h , w; cin >> h >> w; vector <vector<char>> grid(h , vector <char> (w , '.')); for (int i = 0; i<h; i++){ for (int j = 0; j<w; j++){ char c; cin >> c; grid[i][j] = c; } } vector<pair<int,int>> edges = {{1,0} , {-1 , 0} , {0 , 1} , {0 , -1}}; int counter = 1; if (grid[0][0] == 'F'){ dfsF1(0,0, grid , edges); for (int i = 0; i<h; i++){ for (int j = 0; j<w; j++){ if (grid[i][j] == 'F'){ counter ++; dfsF1(i , j , grid , edges); } } } for (int i = 0; i<h; i++){ for (int j = 0; j<w; j++){ if (grid[i][j] == 'R'){ counter ++; dfsR2(i , j , grid , edges); } } } } else{ dfsR1(0,0 , grid , edges); for (int i = 0; i<h; i++){ for (int j = 0; j<w; j++){ if (grid[i][j] == 'R'){ counter ++; dfsR1(i , j , grid , edges); } } } for (int i = 0; i<h; i++){ for (int j = 0; j<w; j++){ if (grid[i][j] == 'F'){ counter ++; dfsF2(i , j , grid , edges); } } } } cout << counter<<endl; } int32_t main(){ // int n; cin >> n; int n = 1; for (int i = 0; i<n; i++){ solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...