Submission #1142461

#TimeUsernameProblemLanguageResultExecution timeMemory
1142461poltanosTracks in the Snow (BOI13_tracks)C++20
100 / 100
488 ms239484 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

vector<int> dx {1, -1, 0, 0};
vector<int> dy {0, 0, 1, -1};

int n, m, ans = 1;
vector<vector<int>> num_animals(4000, vector<int> (4000, 0));
vector<string> snow(4000);

bool inside(int x, int y){
    return (x >= 0 && x <= n - 1 && y >= 0 && y <= m - 1 && snow[x][y] != '.');
}

void solve(){
    cin >> n >> m;
    for(int i = 0; i < n; i++) cin >> snow[i];

    deque<pair<int, int>> q;
    q.push_back({0, 0});
    num_animals[0][0] = 1;

    while(!q.empty()){
        auto c = q.front();
        q.pop_front();
        ans = max(ans, num_animals[c.first][c.second]);

        for(int i = 0; i < 4; i++){
            int x = c.first + dx[i], y = c.second + dy[i];

            if(inside(x, y) && num_animals[x][y] == 0){
                if(snow[c.first][c.second] == snow[x][y]){
                    num_animals[x][y] = num_animals[c.first][c.second];
                    q.push_front({x, y});
                }else{
                    num_animals[x][y] = num_animals[c.first][c.second] + 1;
                    q.push_back({x, y});
                }
            }
        }
    }

    cout << ans << endl;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t = 1;
    while(t--) solve();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...