Submission #1177207

#TimeUsernameProblemLanguageResultExecution timeMemory
1177207t_danhTracks in the Snow (BOI13_tracks)C++20
100 / 100
597 ms110624 KiB
// https://cses.fi/problemset/task/1653 
/*
 ██████████        ███████                       ██  
░░░░░██░░░        ░██░░░░██                     ░██  
    ░██           ░██    ░██   ██████   ███████ ░██  
    ░██           ░██    ░██  ░░░░░░██ ░░██░░░██░██████
    ░██           ░██    ░██   ███████  ░██  ░██░██░░░██
    ░██           ░██    ██   ██░░░░██  ░██  ░██░██  ░██
    ░██     █████ ░███████   ░░████████ ███  ░██░██  ░██
    ░░     ░░░░░  ░░░░░░░     ░░░░░░░░ ░░░   ░░ ░░   ░░
*/
 
#include <bits/stdc++.h>
#include <deque>
#include <queue>
#define input  ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
#define fi first
#define se second
#define eb emplace_back
#define pb push_back
#define ce cout << endl
#define FOR(i, l, r) for (ll i = l; i <= r; i++)
#define FOR2(i, l, r) for (ll i = l; i >= r; i--)
using namespace std;
using ll = long long;
using str = string;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
 
const ll N = 1e5+1;
const ll LOGN = 19;
const int INF = numeric_limits<int>::max();
const ll MOD = 1e9 + 7;
ll dx[] = {1, -1, 0, 0};
ll dy[] = {0, 0, 1, -1};
void solve() {
    int n ,m;
    cin >> n >> m;
    vector<vector<char>> matrix(n+1,vector<char>(m+1,'.'));
    for(int i = 1 ; i <= n ; i ++){
        for(int j = 1 ; j <= m ; j ++){
            cin >> matrix[i][j];
        }
    }
    function<bool(int,int)> inside = [&](int x , int y){
        return  (x > 0 && x <= n && y > 0 && y <= m && matrix[x][y] != '.');
    };
    vector<vector<int>> depth(n+1,vector<int>(m+1,0));
    deque<pii> q;
    q.pb({1,1});
    depth[1][1] = 1;
    int ans = 0;
    while(!q.empty()){
        pii cur_node = q.front();
        q.pop_front();
        ans = max(ans,depth[cur_node.fi][cur_node.se]);
        for(int i = 0 ; i < 4 ; i++){
            int x = cur_node.fi + dx[i] ,y = cur_node.se + dy[i];
            if(inside(x,y) && depth[x][y] == 0){
                if(matrix[x][y] == matrix[cur_node.fi][cur_node.se]){
                    depth[x][y] = depth[cur_node.fi][cur_node.se];
                    q.push_front({x,y});
                }
                else{
                    depth[x][y] = depth[cur_node.fi][cur_node.se] + 1;
                    q.pb({x,y});
                }

            }
        }
    } 
    cout << ans <<endl;
}

 
int main() {
    input
    const bool cap = true;

    if (cap)
        solve();    
    else {
        ll t;
        cin >> t;
        while (t--) solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...