Cod sursa(job #3255272)

Utilizator tonealexandruTone Alexandru tonealexandru Data 9 noiembrie 2024 21:54:01
Problema Barbar Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <bits/stdc++.h>

using namespace std;
char mat[1005][1005];

int flacari[1005][1005];
queue<pair<int, int>> q;

int dirx[] = {0, 0, -1, 1};
int diry[] = {1, -1, 0, 0};

void check(int nivel)
{
    //dfs(nivel);

    // etc etc
}

int main()
{
    /// TO FINISH TMRW
    int n, m;
    cin>>n>>m;

    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            flacari[i][j] = 21e8;

    for(int i=0; i<=n+1; i++)
        flacari[i][0] = -1, flacari[i][m+1] = -1;

    for(int j=0; j<=m+1; j++)
        flacari[0][j] = -1, flacari[n+1][j] = -1;

    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            cin>>mat[i][j];
            if(mat[i][j] == 'D')
                q.push({i, j}), flacari[i][j] = 0;
        }

    while(q.empty() == false)
    {
        int i = q.front().first, j = q.front().second;
        q.pop();

        for(int kk=0; kk<4; kk++)
            if( flacari[ i+dirx[kk] ][ j+diry[kk] ] > flacari[i][j] + 1 )
                q.push({i+dirx[kk], j+diry[kk]}), flacari[ i+dirx[kk] ][ j+diry[kk] ] = flacari[i][j] + 1;
    }


    int maxx = 0;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++){
            cout<<flacari[i][j]<<" ";
            maxx = max(maxx, flacari[i][j]);
        }
        cout<<'\n';
    }


    int st = 0, dr = maxx + 1;
    while(st < dr)
    {
        int mij = (st + dr) / 2;

        if(check(mij) == true)
            st = mij + 1;
        else
            dr = mij - 1;
    }

    cout<<(st + dr) / 2;


    return 0;
}