Submission #489503

#TimeUsernameProblemLanguageResultExecution timeMemory
489503yungyaoVirus Experiment (JOI19_virus)C++17
0 / 100
1 ms356 KiB
using namespace std;
#pragma GCC optimize ("Ofast")
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>

typedef long long LL;
typedef pair<int,int> pii;
#define iter(x) x.begin(),x.end()
#define pb push_back
#define mkp make_pair
#define F first
#define S second
#define REP(n) for (int __=n;__--;)
#define REP0(i,n) for (int i=0;i<n;++i)
#define REP1(i,n) for (int i=1;i<=n;++i)

const int maxn = 805,mod = 0;
const LL inf = 1e9;

int arr[maxn];

void solve(){
    int n,r,c;
    string s;

    cin >> n >> r >> c >> s;
    bool toleft = false; int len = 0;
    int tol = 0, tor = 0;
    REP(2) for (auto &c:s){
        if (c == 'E'){
            if (toleft) tol = max(tol,++len);
            else tor = max(tor,len = 1);
            toleft = true;
        }
        else{
            if (!toleft) tor = max(tor,++len);
            else tol = max(tol,len = 1);
            toleft = false;
        }
    }

    if (!tol) tor = inf;
    if (!tor) tol = inf;

    int ans = inf,anscnt = 0;
    REP(r){
        REP1(i,c) cin >> arr[i];

        REP1(st,c) if (arr[st]){
            int l = st,r = st;

            while (l > 1 and arr[l-1] and tol >= arr[l-1]) --l;
            while (r < c and arr[r+1] and tor >= arr[r+1]) ++r;

            if (r - l + 1 < ans){
                ans = r - l + 1;
                anscnt = 1;
            }
            else if (r - l + 1 == ans) ++anscnt;

            //cerr << l << ',' << r << ' ';
        }
        //cerr << '\n';
    }

    cout << ans << '\n' << anscnt << '\n';
}

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

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...