제출 #1347093

#제출 시각아이디문제언어결과실행 시간메모리
1347093SSKMFNautilus (BOI19_nautilus)C++20
66 / 100
1094 ms1092 KiB
#include <bits/stdc++.h>
using namespace std;

char tip[500][501] , operatie[5001];
bool posibil[500][500][2];

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

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

    for (int linie = 0 ; linie < linii ; linie++)
        { cin >> tip[linie]; }

    cin >> operatie;

    for (int linie = 0 ; linie < linii ; linie++) {
        for (int coloana = 0 ; coloana < coloane ; coloana++) {
            if (tip[linie][coloana] == '.')
                { posibil[linie][coloana][0] = true; }
        }
    }

    for (int indice = 0 ; indice < numar_operatii ; indice++) 
    {
        for (int linie = 0 ; linie < linii ; linie++) {
            for (int coloana = 0 ; coloana < coloane ; coloana++) {
                if (posibil[linie][coloana][0]) {
                    if ((operatie[indice] == 'E' || operatie[indice] == '?') && coloana + 1 < coloane && tip[linie][coloana + 1] == '.')
                        { posibil[linie][coloana + 1][1] = true; }
                    if ((operatie[indice] == 'W' || operatie[indice] == '?') && coloana > 0 && tip[linie][coloana - 1] == '.')
                        { posibil[linie][coloana - 1][1] = true; }
                    if ((operatie[indice] == 'S' || operatie[indice] == '?') && linie + 1 < linii && tip[linie + 1][coloana] == '.')
                        { posibil[linie + 1][coloana][1] = true; }
                    if ((operatie[indice] == 'N' || operatie[indice] == '?') && linie > 0 && tip[linie - 1][coloana] == '.')
                        { posibil[linie - 1][coloana][1] = true; }
                }
            }
        }
        
        for (int linie = 0 ; linie < linii ; linie++) {
            for (int coloana = 0 ; coloana < coloane ; coloana++) 
                { posibil[linie][coloana][0] = posibil[linie][coloana][1]; posibil[linie][coloana][1] = false; }
        }
    }

    int total = 0;
    for (int linie = 0 ; linie < linii ; linie++) {
        for (int coloana = 0 ; coloana < coloane ; coloana++) 
            { total += (posibil[linie][coloana][0] ? 1 : 0); }
    }

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