Submission #819295

# Submission time Handle Problem Language Result Execution time Memory
819295 2023-08-10T09:01:13 Z 이동현(#10134) Virus Experiment (JOI19_virus) C++17
0 / 100
44 ms 12480 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#define int long long
using namespace std;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int m, r, c;
    cin >> m >> r >> c;

    string s;
    cin >> s;
    s += s;
    m += m;

    vector<int> len(16);
    for(int i = 0; i < 16; ++i){
        auto can = [&](int x, char c){
            if((x & 1) && c == 'N') return 1;
            if((x & 2) && c == 'E') return 1;
            if((x & 4) && c == 'S') return 1;
            if((x & 8) && c == 'W') return 1;
            return 0;
        };
        for(int j = 0; j < m; ++j){
            if(!can(i, s[j])) continue;
            int k = j;
            while(k + 1 < m && can(i, s[k + 1])){
                ++k;
            }

            len[i] = max(len[i], k - j + 1);
            j = k;
        }

        if(len[i] == 2 * m) len[i] = (int)1e9;
    }

    // cout << len[2] << ' ' << len[8] << endl;

    vector<vector<int>> a(r, vector<int>(c));
    for(int i = 0; i < r; ++i){
        for(int j = 0; j < c; ++j){
            cin >> a[i][j];
        }
    }

    vector<vector<int>> ans(r, vector<int>(c, 1));

    for(int i = 0; i < r; ++i){
        int lst = 0;
        for(int j = 0; j < c; ++j){
            if(j && (!a[i][j - 1] || a[i][j - 1] > len[2])) lst = j;
            ans[i][j] += j - lst;
        }

        lst = c - 1;
        for(int j = c - 1; j >= 0; --j){
            if(j + 1 < c && (!a[i][j + 1] || a[i][j + 1] > len[8])) lst = j;
            ans[i][j] += lst - j;
        }
    }

    pair<int, int> out = {(int)1e9, -1};
    for(int i = 0; i < r; ++i){
        for(int j = 0; j < c; ++j){
            if(!a[i][j]) continue;

            if(ans[i][j] < out.first){
                out = {ans[i][j], 1};
            }
            else if(ans[i][j] == out.first){
                ++out.second;
            }
        }
    }

    cout << out.first << '\n' << out.second << '\n';
    
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 32 ms 10356 KB Output is correct
3 Incorrect 44 ms 12480 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 32 ms 10356 KB Output is correct
3 Incorrect 44 ms 12480 KB Output isn't correct
4 Halted 0 ms 0 KB -