Submission #1278918

#TimeUsernameProblemLanguageResultExecution timeMemory
1278918SSKMFTracks in the Snow (BOI13_tracks)C++20
100 / 100
412 ms119112 KiB
#include <bits/stdc++.h>
using namespace std;

const int directie[2][4] = {{-1 , 0 , 1 , 0} , {0 , 1 , 0 , -1}};
int distanta[4000][4000];
char tip[4000][4001];

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int linii , coloane;
    cin >> linii >> coloane;

    for (int linie = 0 ; linie < linii ; linie++)
        { cin >> tip[linie]; }
    
    int maxim = 1;
    distanta[0][0] = 1;
    deque < pair <int , int> > ramas;
    ramas.emplace_back(0 , 0);
    while (!ramas.empty())
    {
        const pair <int , int> nod = ramas.front();
        maxim = max(maxim , distanta[nod.first][nod.second]);
        ramas.pop_front();
        
        for (int indice = 0 ; indice < 4 ; indice++)
        {
            const pair <int , int> vecin = {nod.first + directie[0][indice] , nod.second + directie[1][indice]};
            if (0 <= vecin.first && vecin.first < linii && 0 <= vecin.second && vecin.second < coloane && tip[vecin.first][vecin.second] != '.' && !distanta[vecin.first][vecin.second])
            {
                distanta[vecin.first][vecin.second] = distanta[nod.first][nod.second] + (tip[vecin.first][vecin.second] == tip[nod.first][nod.second] ? 0 : 1);
                if (tip[vecin.first][vecin.second] == tip[nod.first][nod.second]) { ramas.push_front(vecin); }
                else { ramas.push_back(vecin); }
            }
        }
    }

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