제출 #1305420

#제출 시각아이디문제언어결과실행 시간메모리
1305420Davdav1232Nautilus (BOI19_nautilus)C++20
66 / 100
1094 ms1152 KiB
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<pii> vii;


int main(){
    int r, c, m; cin>>r>>c>>m;
    bool mm[r][c][2];
    bool taken[r][c];
    for(int i=0; i<r; i++){
        for(int j=0; j<c; j++){
        taken[i][j]=0;
    }
    }
    for(int i=0; i<r; i++){
        string s; cin>>s;
        for(int j=0; j<c; j++){
            if(s[j]=='#'){
                taken[i][j]=1;
            }
        }
    }
    for(int i=0; i<r; i++){
        for(int j=0; j<c; j++){
            mm[i][j][0]=!taken[i][j];
        }
    }
    string way; cin>>way;
    int ind=0;
    for(int l=0; l<m; l++){
        ind=1-ind;
        if(way[l]=='?'){
            for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                    if(taken[i][j]){
                        mm[i][j][ind]=0;
                        continue;
                    }
                    if((i && mm[i-1][j][1-ind]) || (j && mm[i][j-1][1-ind]) || (i<r-1 && mm[i+1][j][1-ind]) || (j<c-1 && mm[i][j+1][1-ind])){
                        mm[i][j][ind]=1;
                    }
                    else mm[i][j][ind]=0;
                }
            }
        }
        else if(way[l]=='N'){
            for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                    if(taken[i][j]){
                        mm[i][j][ind]=0;
                        continue;
                    }
                    if((i<r-1 && mm[i+1][j][1-ind])){
                        mm[i][j][ind]=1;
                    }
                    else mm[i][j][ind]=0;
                }
            }
        }
        else if(way[l]=='S'){
            for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                    if(taken[i][j]){
                        mm[i][j][ind]=0;
                        continue;
                    }
                    if((i && mm[i-1][j][1-ind])){
                        mm[i][j][ind]=1;
                    }
                    else mm[i][j][ind]=0;
                }
            }
        }
        else if(way[l]=='E'){
            for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                    if(taken[i][j]){
                        mm[i][j][ind]=0;
                        continue;
                    }
                    if((j && mm[i][j-1][1-ind])){
                        mm[i][j][ind]=1;
                    }
                    else mm[i][j][ind]=0;
                }
            }
        }
        else if(way[l]=='W'){
            for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                    if(taken[i][j]){
                        mm[i][j][ind]=0;
                        continue;
                    }
                    if((j<c-1 && mm[i][j+1][1-ind])){
                        mm[i][j][ind]=1;
                    }
                    else mm[i][j][ind]=0;
                }
            }
        }
    }
    int ans=0;
    for(int i=0; i<r; i++){
        for(int j=0; j<c; j++){
            if(mm[i][j][ind]){
                //cout<<i<<" "<<j<<"\n";
                ans++;
            }
        }
    }
    cout<<ans;

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