Submission #677798

#TimeUsernameProblemLanguageResultExecution timeMemory
677798puppyVirus Experiment (JOI19_virus)C++17
6 / 100
222 ms852 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int conv(bool N, bool W, bool S, bool E) { return 8 * N + 4 * W + 2 * S + E; } bool isin(char c, int p) { if (c == 'E') { return (p & 1) ? true : false; } if (c == 'S') { return (p & 2) ? true : false; } if (c == 'W') { return (p & 4) ? true : false; } if (c == 'N') { return (p & 8) ? true : false; } } int lim[16]; int arr[55][55]; bool infected[55][55]; int M, R, C; bool valid(int i, int j) { return 0 <= i && i < R && 0 <= j && j < C; } bool isinfected(int i, int j) { if (!valid(i, j)) return false; return infected[i][j]; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> M >> R >> C; string s; cin >> s; s = s + s; for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { cin >> arr[i][j]; } } //N, W, S, E 순 for (int i = 0; i < 16; i++) { bool yes = true; for (int k = 0; k < M; k++) { if (!isin(s[k], i)) { yes = false; break; } } if (yes) lim[i] = 100001; for (int k = 0; k < 2 * M; k++) { if (!isin(s[k], i)) continue; int st = k; while (k < 2 * M - 1 && isin(s[k+1], i)) k++; int en = k; lim[i] = max(lim[i], en - st + 1); } } int ans = 1e9, anscnt = 0; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { //(i, j) 시작 if (arr[i][j] == 0) continue; int cnt = 0; queue<pair<int, int>> q; fill(&infected[0][0], &infected[54][55], false); infected[i][j] = true; q.push(make_pair(i, j)); //ok[0]부터 E, S, W, N while (!q.empty()) { int x = q.front().first, y = q.front().second; q.pop(); cnt++; //(x, y)가 감염됨 for (int k = 0; k < 4; k++) { int nx = x + dx[k], ny = y + dy[k]; if (!valid(nx, ny)) continue; if (arr[nx][ny] == 0) continue; if (infected[nx][ny]) continue; int pv = 0; if (isinfected(nx, ny + 1)) pv |= 1; if (isinfected(nx, ny - 1)) pv |= 4; if (isinfected(nx + 1, ny)) pv |= 2; if (isinfected(nx - 1, ny)) pv |= 8; if (arr[nx][ny] <= lim[pv]) { infected[nx][ny] = true; q.push(make_pair(nx, ny)); } } } if (ans > cnt) { ans = cnt; anscnt = 1; } else if (ans == cnt) { anscnt++; } } } cout << ans << '\n' << anscnt << '\n'; }

Compilation message (stderr)

virus.cpp: In function 'bool isin(char, long long int)':
virus.cpp:24:1: warning: control reaches end of non-void function [-Wreturn-type]
   24 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...