답안 #202659

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
202659 2020-02-17T16:36:25 Z stefdasca Nautilus (BOI19_nautilus) C++14
0 / 100
8 ms 1400 KB
#include<bits/stdc++.h>
#define god dimasi5eks
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define mod 1000000007
#define dancila 3.14159265359
#define eps 1e-9

// #define fisier 1

using namespace std;

typedef long long ll;

int n, m, k;

string s;
char mat[502][502];
bitset<502> dp[5002][502];

int main()
{

    #ifdef fisier
        ifstream f("input.in");
        ofstream g("output.out");
    #endif

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m >> k;
    for(int i = 0; i < n; ++i)
        cin >> mat[i];
    cin >> s;
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
            if(mat[i][j] != '#')
                dp[0][i][j] = 1;
    for(int x = 0; x < k; ++x)
    {
        if(s[x] == 'E')
        {
            for(int i = 0; i < n; ++i)
                for(int j = 0; j + 1 < m; ++j)
                {
                    if(mat[i][j] == '#')
                        dp[x][i][j] = 0;
                    if(dp[x][i][j] == 0)
                        continue;
                    if(mat[i][j+1] != '#')
                        dp[x+1][i][j+1] = 1;
                }
        }
        if(s[x] == 'W')
        {
            for(int i = 0; i < n; ++i)
                for(int j = 1; j < m; ++j)
                {
                    if(mat[i][j] == '#')
                        dp[x][i][j] = 0;
                    if(dp[x][i][j] == 0)
                        continue;
                    if(mat[i][j-1] != '#')
                        dp[x+1][i][j-1] = 1;
                }
        }
        if(s[x] == 'N')
        {
            for(int i = 0; i + 1 < n; ++i)
                dp[x+1][i] = dp[x][i+1];
        }
        if(s[x] == 'S')
        {
            for(int i = 1; i < n; ++i)
                dp[x+1][i] = dp[x][i-1];
        }
        if(s[x] == '?')
        {
            for(int i = 0; i < n; ++i)
                for(int j = 0; j < m; ++j)
                {
                    if(mat[i][j] == '#')
                        dp[x][i][j] = 0;
                    if(dp[x][i][j] == 0)
                        continue;
                    if(j + 1 < m && mat[i][j+1] != '#')
                        dp[x+1][i][j+1] = 1;
                    if(i + 1 < n && mat[i+1][j] != '#')
                        dp[x+1][i+1][j] = 1;
                    if(j && mat[i][j-1] != '#')
                        dp[x+1][i][j-1] = 1;
                    if(i && mat[i-1][j] != '#')
                        dp[x+1][i-1][j] = 1;
                }
        }
    }
    int ans = 0;
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
            ans += dp[k][i][j];
    cout << ans;
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1400 KB Output is correct
2 Incorrect 8 ms 1400 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1400 KB Output is correct
2 Incorrect 8 ms 1400 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1400 KB Output is correct
2 Incorrect 8 ms 1400 KB Output isn't correct
3 Halted 0 ms 0 KB -