Submission #1333970

#TimeUsernameProblemLanguageResultExecution timeMemory
1333970rainmarNautilus (BOI19_nautilus)C++20
100 / 100
137 ms512 KiB
#include<bits/stdc++.h>
using namespace std;

bitset<500> g[500];
bitset<500> can[500];

int main() {

    int R,C,M; cin >> R >> C >> M;

    for(int i = 0; i < R; i++) {
        string s; cin >> s;
        for(int j = 0; j < C; j++) {
            g[i][j] = (s[j] == '.');
        }
    }

    string m; cin >> m;

    for(int i = 0; i < R; i++) 
        for(int j = 0; j < C; j++) {
            can[i][j] = g[i][j];
        }

    //14 36

    for(auto e : m) {

        if(e == 'W') {
            for(int i = 0; i < R; i++) {
                can[i] = (can[i] >> 1);
            }
        } else if (e == 'E') {
            for(int i = 0; i < R; i++) {
                can[i] = (can[i] << 1);
            }
        } else if(e == 'S') {
            //14 39
            for(int i = R-1; i > 0; i--) {
                can[i] = can[i-1];
            }
            can[0] = 0;
        } else if(e == 'N') {
            //14 39
            for(int i = 0; i < R-1; i++) {
                can[i] = can[i+1];
            }
            can[R-1] = 0;
        } else {
            bitset<500> t[500];

            for(int x = 0; x < 500; x++) {
                t[x] = ((x!=0)? can[x-1] : 0) | (can[x] << 1) | (can[x] >> 1) | ((x!=R-1)? can[x+1] : 0) ;
            }

            for(int i = 0; i < 500; i++) can[i] = t[i]; 
        }

        for(int i = 0; i < 500; i++) {
            can[i] = can[i] & g[i];
        }

        /*
        cout << "Map \n";
        for(int i = 0; i < R; i++) {
            
            for(int j = 0; j < C; j++) { 
                if(g[i][j] == 0) {cout << "-"; continue;}
                cout << (can[i][j]==1)? '#' : '.';
            }
            cout << endl;
        }
            */


    }

    int cnt = 0;

    for(int i = 0; i < R; i++) {
        for(int j = 0; j < C; j++) {
           
            if(can[i][j] == 1) cnt++;
        }
    }

    cout << cnt << endl;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...