Submission #1261094

#TimeUsernameProblemLanguageResultExecution timeMemory
1261094nazar_shchTracks in the Snow (BOI13_tracks)C++20
100 / 100
877 ms174124 KiB
#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define endl '\n'

using namespace std;
const int N=4e3 + 7;
const int mod = 1e9 + 7;
const ll inf = 1e12;

ll dist[N][N];
string s[N];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n, m;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>s[i];
    }

    dist[0][0] = 1;
    deque<pair<int, int>>q;
    q.pb({0, 0});
    ll ans = 0;
    while(!q.empty()){
        auto cur = q.front();q.pop_front();
        ans = max(ans, dist[cur.ff][cur.ss]);
        // cout<<cur.ff<<" "<<cur.ss<<" "<<dist[cur.ff][cur.ss]<<endl;
        vector<pair<int, int>>dv = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
        for(auto d: dv){
            int x = cur.ff + d.ff;
            int y = cur.ss + d.ss;
            if(x < n && x >= 0 && y < m && y >= 0 && dist[x][y] == 0 && s[x][y] != '.'){
                if(s[cur.ff][cur.ss] == s[x][y]){
                    dist[x][y] = dist[cur.ff][cur.ss];
                    q.push_front({x, y});
                } else {
                    dist[x][y] = dist[cur.ff][cur.ss] + 1;
                    q.push_back({x, y});
                }
            }
        }
    }
    cout<<ans<<endl;


    /*/
       RRRRFR
          RRF
           RF
           RR
    */

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...