제출 #193701

#제출 시각아이디문제언어결과실행 시간메모리
193701gs14004바이러스 (JOI19_virus)C++17
0 / 100
2037 ms15072 KiB
#include <bits/stdc++.h> #define sz(v) ((int)(v).size()) #define all(v) (v).begin(), (v).end() using namespace std; using lint = long long; using pi = pair<int, int>; const int MAXN = 808; const int dx[4] = {1, 0, -1, 0}; const int dy[4] = {0, 1, 0, -1}; int n, m, dead[MAXN][MAXN]; bool good[MAXN][MAXN][16]; bool vis[MAXN][MAXN]; int ind[MAXN][MAXN]; bool ok(int x, int y){ return x >= 0 && x < n && y >= 0 && y < m && !vis[x][y]; } int reach(int x, int y){ if(dead[x][y]) return 1e9; vector<pi> que; vis[x][y] = 1; que.emplace_back(x, y); for(int i=0; i<sz(que); i++){ auto pnt = que[i]; for(int j=0; j<4; j++){ int nx = pnt.first + dx[j]; int ny = pnt.second + dy[j]; if(ok(nx, ny)){ ind[nx][ny] |= (1<<j); if(good[nx][ny][ind[nx][ny]]){ vis[nx][ny] = 1; que.emplace_back(nx, ny); } } } } for(auto &[x, y] : que){ ind[x][y] = 0; vis[x][y] = 0; } return sz(que); } void solve(){ int dap = 1e9; int cnt = 0; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ int val = reach(i, j); if(dap > val){ dap = val; cnt = 0; } if(dap == val) cnt++; } } printf("%d %d\n", dap, cnt); } char buf[200005]; int main(){ int mp[256]; mp['N'] = 0; mp['W'] = 1; mp['S'] = 2; mp['E'] = 3; int k; scanf("%d %d %d",&k,&n,&m); scanf("%s", buf); for(int i=0; i<k; i++){ buf[i + k] = buf[i]; } k <<= 1; int maxt[16] = {}; for(int i=0; i<16; i++){ int cnt = 0; for(int j=0; j<k; j++){ if((i >> mp[buf[j]]) & 1){ cnt++; maxt[i] = max(maxt[i], cnt); } else{ cnt = 0; } } if(maxt[i] == k) maxt[i] = 1e9; } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ int x; scanf("%d",&x); if(x == 0){ dead[i][j] = 1; continue; } for(int k=0; k<16; k++){ if(x <= maxt[k]) good[i][j][k] = 1; } } } solve(); }

컴파일 시 표준 에러 (stderr) 메시지

virus.cpp: In function 'int main()':
virus.cpp:80:22: warning: array subscript has type 'char' [-Wchar-subscripts]
    if((i >> mp[buf[j]]) & 1){
                      ^
virus.cpp:70:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d",&k,&n,&m);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
virus.cpp:71:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s", buf);
  ~~~~~^~~~~~~~~~~
virus.cpp:92:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    int x; scanf("%d",&x);
           ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...