제출 #147241

#제출 시각아이디문제언어결과실행 시간메모리
147241Alexa2001바이러스 (JOI19_virus)C++17
0 / 100
74 ms6428 KiB
#include <bits/stdc++.h> using namespace std; const int Nmax = 808, inf = 1e9; int a[Nmax][Nmax]; string moves; int goW[Nmax], goE[Nmax], maxE, maxW; int L, N, M; void solve(int &best, int &cnt, int a[]) { int i; goW[1] = (a[1] != inf); for(i=2; i<=M; ++i) { goW[i] = (maxE >= a[i-1] ? goW[i-1] : 0) + 1; if(a[i] == inf) goW[i] = 0; } goE[M] = (a[M] != inf); for(i=M-1; i>=1; --i) { goE[i] = (maxW >= a[i+1] ? goE[i+1] : 0) + 1; if(a[i] == inf) goE[i] = 0; } for(i=1; i<=M; ++i) { if(a[i] == inf) continue; int curr = goE[i] + goW[i] - 1; if(curr < best) best = curr, cnt = 1; else if(curr == best) ++cnt; } } void solve1() { int i, nr; maxE = 0, maxW = 0; nr = 0; for(i=0; i<L; ++i) { if(moves[i] == 'E') ++nr; else maxE = max(maxE, nr), nr = 0; } for(i=0; i<L; ++i) if(moves[i] == 'E') ++nr; else break; maxE = max(maxE, nr); nr = 0; for(i=0; i<L; ++i) { if(moves[i] == 'W') ++nr; else maxW = max(maxW, nr), nr = 0; } for(i=0; i<L; ++i) if(moves[i] == 'W') ++nr; else break; maxW = max(maxW, nr); int best = inf, cnt = 0; for(i=1; i<=N; ++i) solve(best, cnt, a[i]); cout << best << '\n' << cnt << '\n'; } int main() { // freopen("virus.in", "r", stdin); cin.tie(0); cin.sync_with_stdio(false); cin >> L >> N >> M; cin >> moves; int i, j; for(i=1; i<=N; ++i) for(j=1; j<=M; ++j) { cin >> a[i][j]; if(a[i][j] == 0) a[i][j] = inf; } solve1(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...