제출 #1165896

#제출 시각아이디문제언어결과실행 시간메모리
1165896LeonidCukNautilus (BOI19_nautilus)C++20
66 / 100
1096 ms1160 KiB
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>>vrni(char a)
{
    vector<pair<int,int>>res;
    if(a=='S'||a=='?')
    {
        res.push_back({-1,0});
    }
    if(a=='N'||a=='?')
    {
        res.push_back({1,0});
    }
    if(a=='W'||a=='?')
    {
        res.push_back({0,1});
    }
    if(a=='E'||a=='?')
    {
        res.push_back({0,-1});
    }
    return res;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,m,k;
    char a;
    cin>>n>>m>>k;
    bool dp[2][n][m],v[n][m];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>a;
            if(a=='#')
            {
                dp[1][i][j]=false;
                v[i][j]=false;
            }
            else
            {
                dp[1][i][j]=true;
                v[i][j]=true;
            }
        }
    }
    for(int i=0;i<k;i++)
    {
        cin>>a;
        vector<pair<int,int>>pos=vrni(a);
        int k1=i%2,k2=(i+1)%2;
        for(int i1=0;i1<n;i1++)
        {
            for(int j1=0;j1<m;j1++)
            {
                dp[k1][i1][j1]=false;
                if(!v[i1][j1])continue;
                for(auto p:pos)
                {
                    int dx=p.first+i1,dy=p.second+j1;
                    if(dx>=0&&dx<n&&dy>=0&&dy<m&&dp[k2][dx][dy])dp[k1][i1][j1]=true;
                }
            }
        }
    }
    int bb=0,k1=(k-1)%2;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(dp[k1][i][j])bb++;
        }
    }
    cout<<bb;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...