Submission #1251319

#TimeUsernameProblemLanguageResultExecution timeMemory
1251319fulminataTracks in the Snow (BOI13_tracks)C++20
17.60 / 100
1269 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using db = double; template<typename T> using v = vector<T>; template<typename T, typename U> using p = pair<T, U>; #define rep(i, a, b) for (ll i = a; i < b; i++) #define all(x) begin(x), end(x) #define sz(x) (ll)(x).size() ll n, m; v<v<char>> grid; v<v<ll>> num; queue<p<ll, ll>> processing; void dfs(ll row, ll col) { if (row > 0 && grid[row][col] == grid[row - 1][col] && num[row - 1][col] == 1e18) { processing.push({row - 1, col}); num[row - 1][col] = num[row][col]; dfs(row - 1, col); } if (row < n - 1 && grid[row][col] == grid[row + 1][col] && num[row + 1][col] == 1e18) { processing.push({row + 1, col}); num[row + 1][col] = num[row][col]; dfs(row + 1, col); } if (col > 0 && grid[row][col] == grid[row][col - 1] && num[row][col - 1] == 1e18) { processing.push({row, col - 1}); num[row][col - 1] = num[row][col]; dfs(row, col - 1); } if (col < m - 1 && grid[row][col] == grid[row][col + 1] && num[row][col + 1] == 1e18) { processing.push({row, col + 1}); num[row][col + 1] = num[row][col]; dfs(row, col + 1); } } void solve() { cin >> n >> m; grid = v<v<char>>(n, v<char>(m)); rep(i, 0, n) { string s; cin >> s; rep(j, 0, m) { grid[i][j] = s[j]; } } num = v<v<ll>>(n, v<ll>(m, 1e18)); num[0][0] = 1; processing.push({0, 0}); dfs(0, 0); while (!processing.empty()) { p<ll, ll> fr = processing.front(); processing.pop(); ll row = fr.first; ll col = fr.second; if (row > 0 && grid[row][col] != grid[row - 1][col] && grid[row - 1][col] != '.' && num[row - 1][col] == 1e18) { num[row - 1][col] = num[row][col] + 1; dfs(row - 1, col); } if (row < n - 1 && grid[row][col] != grid[row + 1][col] && grid[row + 1][col] != '.' && num[row + 1][col] == 1e18) { num[row + 1][col] = num[row][col] + 1; dfs(row + 1, col); } if (col > 0 && grid[row][col] != grid[row][col - 1] && grid[row][col - 1] != '.' && num[row][col - 1] == 1e18) { num[row][col - 1] = num[row][col] + 1; dfs(row, col - 1); } if (col < m - 1 && grid[row][col] != grid[row][col + 1] && grid[row][col + 1] != '.' && num[row][col + 1] == 1e18) { num[row][col + 1] = num[row][col] + 1; dfs(row, col + 1); } } ll mx = 0; rep(i, 0, n) { rep(j, 0, m) { //if (num[i][j] != 1e18) cout << num[i][j] << " "; //else cout << "inf "; if (num[i][j] != 1e18) mx = max(mx, num[i][j]); } //cout << endl; } cout << mx << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll t = 1; //cin >> t; while (t-- > 0) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...