Submission #570124

#TimeUsernameProblemLanguageResultExecution timeMemory
570124danikoynovNautilus (BOI19_nautilus)C++14
66 / 100
1082 ms8812 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 510;

int n, m, l, used[maxn][maxn];
int dir(char c)
{
    if (c == 'N')
        return 0;
    if (c == 'E')
    return 1;
    if (c == 'S')
        return 2;
    if (c == 'W')
        return 3;
    return -1;
}
char c[maxn][maxn];
int us[maxn][maxn];
pair < int, int > nb[4] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};

void solve()
{
    cin >> n >> m >> l;
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
    {
        cin >> c[i][j];
        if (c[i][j] == '#')
            used[i][j] = 1;
    }

    for (int i = 0; i <= n + 1; i ++)
        used[i][0] = used[i][m + 1] = 1;
    for (int i = 0; i <= m + 1; i ++)
        used[0][i] = used[n + 1][i] = 1;
    vector < pair < int, int > > v;
    for (int i = 1; i <= n; i ++)
    for (int j = 1; j <= m; j ++)
        if (used[i][j] == 0)
    v.push_back({i, j});

    for (int i = 1; i <= l; i ++)
    {
                for (int j = 1; j <= n; j ++)
            for (int p = 1; p <= m; p ++)
                us[j][p] = 0;

        char c;
        cin >> c;

        vector < pair < int, int > > new_v;
        for (int d = 0; d < 4; d ++)
        {
            if (dir(c) == d || dir(c) == -1)
            {

                for (int j = 0; j < v.size(); j ++)
                {
                    pair < int, int > neib = v[j];
                    neib.first = neib.first + nb[d].first;
                    neib.second = neib.second + nb[d].second;
                    if (used[neib.first][neib.second])
                        continue;
                    us[neib.first][neib.second] = 1;
                }
            }
        }
                      /**  for (int j = 1; j <= n; j ++, cout << endl)
            for (int p = 1; p <= m; p ++)
                cout << us[j][p];
            cout << "-----------------" << endl;*/
        for (int j = 1; j <= n; j ++)
            for (int p = 1; p <= m; p ++)
            if (us[j][p])
        new_v.push_back({j, p});
        v = new_v;
    }

    cout << v.size() << endl;;
}
int main()
{
    solve();
    return 0;
}

Compilation message (stderr)

nautilus.cpp: In function 'void solve()':
nautilus.cpp:60:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |                 for (int j = 0; j < v.size(); j ++)
      |                                 ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...