제출 #1347094

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

char tip[500][501] , operatie[5001];
bitset <500> posibil[2][500] , initial[500];

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[0][linie].set(coloana); initial[linie].set(coloana); }
        }
    }

    for (int indice = 0 ; indice < numar_operatii ; indice++) 
    {
        if (operatie[indice] == 'E' || operatie[indice] == '?') {
            for (int linie = 0 ; linie < linii ; linie++)
                { posibil[1][linie] |= (posibil[0][linie] << 1); }
        }

        if (operatie[indice] == 'W' || operatie[indice] == '?') {
            for (int linie = 0 ; linie < linii ; linie++)
                { posibil[1][linie] |= (posibil[0][linie] >> 1); }
        }
        
        if (operatie[indice] == 'S' || operatie[indice] == '?') {
            for (int linie = 1 ; linie < linii ; linie++)
                { posibil[1][linie] |= posibil[0][linie - 1]; }
        }
        
        if (operatie[indice] == 'N' || operatie[indice] == '?') {
            for (int linie = 0 ; linie + 1 < linii ; linie++)
                { posibil[1][linie] |= posibil[0][linie + 1]; }
        }
        
        for (int linie = 0 ; linie < linii ; linie++)
        {
            posibil[0][linie] = posibil[1][linie];
            posibil[0][linie] &= initial[linie];
            posibil[1][linie].reset();
        }
    }

    int total = 0;
    for (int linie = 0 ; linie < linii ; linie++)
        { total += posibil[0][linie].count(); }

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