제출 #1324985

#제출 시각아이디문제언어결과실행 시간메모리
1324985edga1Nautilus (BOI19_nautilus)C++20
66 / 100
12 ms568 KiB
#include <bits/stdc++.h>

using namespace std;

int b[105][105],p[105][105],p2[105][105];
int dC[]={0,1,0,-1};
int dR[]={-1,0,1,0};

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int R,C,M;
    cin>>R>>C>>M;
    for(int r=0; r<R; r++){
        string s; cin>>s;
        for(int c=0; c<C; c++){
            if(s[c]=='#') b[r][c]=1;
        }
    }
    for(int r=0; r<R; r++){
        for(int c=0; c<C; c++){
            p[r][c]=1-b[r][c];
        }
    }
    string s; cin>>s;
    for(int m=0; m<M; m++){
        char c=s[m];
        int d;
        if(c=='N') d=0;
        if(c=='E') d=1;
        if(c=='S') d=2;
        if(c=='W') d=3;
        if(c=='?') d=4;
        for(int r=0; r<R; r++){
            for(int c=0; c<C; c++){
                if(p[r][c]==0) continue;
                if(d==4){
                    for(int dd=0; dd<4; dd++){
                        int nr=r+dR[dd], nc=c+dC[dd];
                        if(nr<0 || nr>=R || nc<0 || nc>=C) continue;
                        if(b[nr][nc]) continue;
                        p2[nr][nc]=1;
                    }
                    continue;
                }
                int nr=r+dR[d], nc=c+dC[d];
                if(nr<0 || nr>=R || nc<0 || nc>=C) continue;
                if(b[nr][nc]) continue;
                p2[nr][nc]=1;
            }
        }
        for(int r=0; r<R; r++){
            for(int c=0; c<C; c++){
                p[r][c]=p2[r][c];
                p2[r][c]=0;
            }
        }
    }
    int rez=0;
    for(int r=0; r<R; r++){
        for(int c=0; c<C; c++){
            rez+=p[r][c];
        }
    }
    cout<<rez;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...