Submission #1273983

#TimeUsernameProblemLanguageResultExecution timeMemory
1273983hasanfaqatTracks in the Snow (BOI13_tracks)C++20
24.27 / 100
305 ms98512 KiB
#include<bits/stdc++.h>
using namespace std;
int H, W; 
string snow[4005];

bool inside(int y, int x){
    if( y < H && y >= 0 && x < W && x >= 0 && snow[y][x] != '.' ){
        return true;
    }else return false;
}

int main(){
    int mx[4] = {-1, 1, 0, 0};
    int my[4] = {0, 0, 1, -1};
    cin>>H>>W;
    int dist[H][W], ans = 1;
    for(int i = 0; i< H; i++) for(int j = 0; j < W; j++) dist[i][j] = 0;
    for(int i = 0; i < H; i++) cin>>snow[i];
    deque<pair<int,int>> curr; // kalo samaen depan, beda belakang
    dist[0][0] = 1;
    curr.push_front({0,0});
    while(!curr.empty()){
        auto [curry, currx] = curr.front(); curr.pop_front();
        ans = max(dist[curry][currx], ans);

        for(int i = 0; i < 4; i++){
            int x = currx + mx[i], y = curry + my[i];
            if(dist[y][x] == 0 && inside(y,x)){
                if(snow[y][x] != snow[curry][currx]){
                    curr.push_back({y,x});
                    dist[y][x] = dist[curry][currx] + 1;
                }else{
                    curr.push_front({y,x});
                    dist[y][x] = dist[curry][currx];
                }
            }
        }
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...