Submission #749049

#TimeUsernameProblemLanguageResultExecution timeMemory
749049faricaTracks in the Snow (BOI13_tracks)C++14
2.19 / 100
579 ms43100 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; typedef vector<int> vi; typedef pair<int,int> pi; const int INF = 1e9; const int MX = 5e5 + 23; const int MOD = 1e9+7; const int MAX_N = 1e6; const int MAX_N2 = 1e5; const int TWO_MOD_INV = 500000004; const int M = 998244353; void solve() { int h,w,r=0,f=0; cin >> h >> w; char grid[h][w]; for(int i=0; i<h; ++i) { string s; cin >> s; for(int j=0; j<w; ++j) { grid[i][j]=s[j]; if(grid[i][j]=='R') ++r; else if(grid[i][j]=='F') ++f; } } queue<pair<int,int>>q; q.push({0, 0}); bool visited[h][w]; memset(visited, 0, sizeof visited); int ans=0; if(r) ++ans; if(f) ++ans; visited[0][0]=1; while(!q.empty()) { int x=q.front().first, y=q.front().second; q.pop(); if(grid[x][y]=='R') --r; else --f; if(x && !visited[x-1][y] && grid[x-1][y]==grid[x][y]) { visited[x-1][y]=1; q.push({x-1, y}); } if(y && !visited[x][y-1] && grid[x][y-1]==grid[x][y]) { visited[x][y-1]=1; q.push({x, y-1}); } if(x+1<h && !visited[x+1][y] && grid[x+1][y]==grid[x][y]) { visited[x+1][y]=1; q.push({x+1, y}); } if(y+1<w && !visited[x][y+1] && grid[x][y+1]==grid[x][y]) { visited[x][y+1]=1; q.push({x, y+1}); } } if(grid[0][0]=='R' && r) ++ans; else if(grid[0][0]=='F' && f) ++ans; cout << ans << endl; } signed main() { //freopen("odometer.in","r",stdin); //freopen("odometer.out","w",stdout); int t=1; while(t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...