Submission #1239744

#TimeUsernameProblemLanguageResultExecution timeMemory
1239744Noname_1900Tracks in the Snow (BOI13_tracks)C++20
100 / 100
946 ms45940 KiB
#include<bits/stdc++.h>
using namespace std;
const int NMAX = 4000;
const int INFINI = 1000000;
char tab[NMAX][NMAX];
int nbAVoir;
int nbL, nbC;
int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> nbL >> nbC;
    nbAVoir = 0;
    for(int l = 0; l < nbL; l++)
    {
        for(int c = 0; c < nbC; c++)
        {
            cin >> tab[l][c];
            if(tab[l][c] != '.')    nbAVoir++;
        }
    }
   // char dep = tab[0][0];
    int nbTypes = 0;
    queue<pair<int, int>> casesActu;
    
    casesActu.push({0, 0});
    while(casesActu.size())
    {
        nbTypes ++;
        queue<pair<int, int>> proCases;
        while(casesActu.size())
        {
            auto cas = casesActu.front();
            casesActu.pop();
            if(tab[cas.first][cas.second] == '.')   continue;
            char couleur = tab[cas.first][cas.second];
            tab[cas.first][cas.second] = '.';
            
            for(int iD = 0; iD < 4; iD++)
            {
                int nouvL = cas.first+dir[iD][0], nouvC = cas.second+dir[iD][1];
                if((nouvL < 0) || (nouvC < 0) || (nouvL >= nbL) || (nouvC >= nbC))  continue;
                if((tab[nouvL][nouvC] == '.'))  continue;
                if(tab[nouvL][nouvC] == couleur)    casesActu.push({nouvL, nouvC});
                else proCases.push({nouvL, nouvC});
            }
        }
        casesActu = proCases;
    }
    cout << nbTypes;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...