제출 #286361

#제출 시각아이디문제언어결과실행 시간메모리
286361Alexa2001Sandwich (JOI16_sandwich)C++17
0 / 100
12 ms896 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1e9; const int Nmax = 404; int cells, n, m, nr; bool bad; char a[Nmax][Nmax]; int ans[Nmax][Nmax]; int Upper[Nmax][Nmax], Lower[Nmax][Nmax]; void add_upper(int x, int y); void add_lower(int x, int y) { if(Lower[x][y] == nr) bad = 1; if(Lower[x][y]) return; Lower[x][y] = nr; ++cells; if(a[x][y] == 'N') /// adaug dreapta { if(a[x][y+1] == 'N') add_lower(x, y+1); else if(a[x][y+1] == 'Z') add_upper(x, y+1); if(x - 1 >= 1) add_lower(x-1, y); } else { if(a[x][y-1] == 'N') add_upper(x, y-1); else if(a[x][y-1] == 'Z') add_lower(x, y-1); if(x - 1 >= 1) add_lower(x-1, y); } } void add_upper(int x, int y) { if(Upper[x][y] == nr) bad = 1; if(Upper[x][y]) return; Upper[x][y] = nr; ++cells; if(a[x][y] == 'N') /// adaug dreapta { if(a[x][y-1] == 'N') add_upper(x, y-1); else if(a[x][y-1] == 'Z') add_lower(x, y-1); if(x + 1 <= n) add_upper(x+1, y); } else { if(a[x][y+1] == 'N') add_lower(x, y+1); else if(a[x][y+1] == 'Z') add_upper(x, y+1); if(x + 1 <= n) add_upper(x+1, y); } } void solve1(int c) { int i, j; for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) Lower[i][j] = Upper[i][j] = 0; cells = 0; bad = 0; for(i=1; i<=n; ++i) { ++nr; add_lower(i, c); if(!bad) ans[i][c] = min(ans[i][c], cells); } } void solve2(int c) { int i, j; for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) Lower[i][j] = Upper[i][j] = 0; cells = 0; bad = 0; for(i=n; i; --i) { ++nr; add_upper(i, c); if(!bad) ans[i][c] = min(ans[i][c], cells); } } int main() { // freopen("input", "r", stdin); cin.tie(0); cin.sync_with_stdio(false); cin >> n >> m; int i, j; for(i=1; i<=n; ++i) cin >> (a[i] + 1); for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) ans[i][j] = inf; for(i=1; i<=m; ++i) solve1(i); for(i=1; i<=m; ++i) solve2(i); for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) cout << (ans[i][j] == inf ? -1 : 2 * ans[i][j]) << " \n"[j==m]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...