Submission #1187855

#TimeUsernameProblemLanguageResultExecution timeMemory
1187855jamalzadehNautilus (BOI19_nautilus)C++20
0 / 100
2 ms320 KiB
#include<bits/stdc++.h>
using namespace std;

int main() {
    int x,y , m;
    cin>>x>>y>>m;
    char map[x][y];
    bool dp[x][y][4]={};
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            cin>>map[i][j];
        }
    }
    char rotations[m];
    for(int i=0; i<m; i++) {
        cin>>rotations[i];
    }
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            if(i<x-1 and map[i][j]=='.' and map[i+1][j]=='.') {
                dp[i][j][0]=true;
            }
            if(j<y-1 and map[i][j]=='.' and map[i][j+1]=='.') {
                dp[i][j][1]=true;
            }
            if(i-1>0 and map[i][j]=='.' and map[i-1][j]=='.') {
                dp[i][j][2]=true;
            }
            if(j-1>0 and map[i][j]=='.' and map[i][j-1]=='.') {
                dp[i][j][3]=true;
            }
        }
    }
    int ans=0;
    for(int i=0; i<x; i++) {
        for(int j=0; j<y; j++) {
            if(map[i][j]=='#') {
                continue;
            }
            bool canRotate=true;
            int dx=0, dy=0;
            for( char r : rotations) {
                if(r=='N' and dp[i+dx][j+dy][0]) {
                    dx--;
                    continue;
                }
                if(r=='E' and dp[i+dx][j+dy][1]) {
                    dy++;
                    continue;
                }
                if(r=='S' and dp[i+dx][j+dy][2]) {
                    dx++;
                    continue;
                }
                if(r=='W' and dp[i+dx][j+dy][3]) {
                    dy--;
                    continue;
                }
                if(r=='?') {
                    if(dp[i+dx][j+dy][0]) {
                        dx--;
                    }
                    else if(dp[i+dx][j+dy][1]) {
                        dy++;
                    }
                    else if(dp[i+dx][j+dy][2]) {
                        dx++;
                    }
                    else if(dp[i+dx][j+dy][3]) {
                        dy--;
                    }
                    continue;
                }
                canRotate=false;
                break;
            }
            if(canRotate) {
                ans++;
            }
        }
    }
    cout<<ans;
}

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