Submission #1097499

#TimeUsernameProblemLanguageResultExecution timeMemory
1097499jaintanmaypTracks in the Snow (BOI13_tracks)C++14
100 / 100
811 ms250852 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
// #define ll double
#define vl vector<ll>
#define vpll vector<pair<ll,ll>>
#define vvl vector<vector<ll>> 
#define vvc vector<vector<char>> 
#define newl cout << endl;
#define dbg(v) cout << "Line(" << __LINE__ << ") -> " << #v << " = " << (v) << endl; 


const ll N = 4*(1e3) + 2;
// vvl adj(N);
vector<string> field(N);

// vector<ll> vis(N,0);
ll n, m;

ll dr[4] = {+1, 0, 0, -1};
ll dc[4] = {0, -1, +1, 0};

bool check(ll r, ll c){
    if(r < 0 || r >= n) return false;
    if(c < 0 || c >= m) return false;
    if(field[r][c] == '.') return false;
    
    return true;
}

void solve(){
 
    cin >> n >> m;
    
    for(ll i = 0; i < n; i++){
        cin >> field[i];
    }
    
    deque<pair<ll,ll>> q;
    vvl dist(n, vl(m, -1));
    q.push_back({0,0});
    dist[0][0] = 1;
    
    ll ans = 1;
    
    while(!q.empty()){
        auto it =  q.front();
        q.pop_front();
        ll r  = it.first;
        ll c =  it.second;

        
        for(ll i = 0; i < 4; i++){
            ll nr = r + dr[i];
            ll nc = c + dc[i];
            
            ans = max(ans , dist[r][c]);
            if(!check(nr, nc)) continue;
            
            if(dist[nr][nc] == -1){
                if(field[r][c] == field[nr][nc]){
                    dist[nr][nc] = dist[r][c];
                    q.push_front({nr, nc});
                }
                else{
                    dist[nr][nc] = dist[r][c] + 1;
                    q.push_back({nr, nc});
                    // ans++;
                }
            }
            
        }
        
    }
    

    cout << ans << endl;
    
    
    return;
 
}
 
int main(){
    
    ll t=1;
    // cin>>t;
    while(t>0){
        solve();
        t--;
    }
    
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...