이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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);
if(maxE == 2*L) maxE = inf - 10;
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);
if(maxW == 2*L) maxW = inf - 10;
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();
// solve2();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |