제출 #92080

#제출 시각아이디문제언어결과실행 시간메모리
92080arman_ferdousMecho (IOI09_mecho)C++17
45 / 100
544 ms66560 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; const int N = 1001; const int inf = 2e9; int n, S, d[N][N], dist[N][N]; char s[N][N]; queue<ii> q; ii mecho, home; int dx[] = {1,0,-1,0}; int dy[] = {0,1,0,-1}; bool can(int T) { for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) dist[i][j] = inf; if(T * S >= d[mecho.first][mecho.second]) return false; q.push(mecho); dist[mecho.first][mecho.second] = T * S; ii u; int arrival, tx, ty; while(!q.empty()) { u = q.front(); q.pop(); for(int i = 0; i < 4; i++) { tx = u.first + dx[i], ty = u.second + dy[i]; if(min(tx,ty) < 0 || max(tx,ty) >= n) continue; if(s[tx][ty] != 'G' && s[tx][ty] != 'D') continue; arrival = dist[u.first][u.second] + 1; if(arrival >= d[tx][ty] || arrival > dist[tx][ty]) continue; dist[tx][ty] = dist[u.first][u.second] + 1; q.push({tx,ty}); } } return dist[home.first][home.second] != inf; } int main() { scanf("%d %d", &n, &S); for(int i = 0; i < n; i++) scanf(" %s", s[i]); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) { d[i][j] = inf; if(s[i][j] == 'M') mecho = {i,j}; else if(s[i][j] == 'D') home = {i,j}; } s[mecho.first][mecho.second] = 'G'; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(s[i][j] == 'H') { q.push({i,j}); d[i][j] = 0; } while(!q.empty()) { ii u = q.front(); q.pop(); for(int i = 0; i < 4; i++) { int tx = u.first + dx[i], ty = u.second + dy[i]; if(min(tx,ty) < 0 || max(tx,ty) >= n) continue; if(s[tx][ty] != 'G') continue; if(d[tx][ty] < d[u.first][u.second] + S) continue; d[tx][ty] = d[u.first][u.second] + S; q.push({tx,ty}); } } int lo = 0, hi = n * n, ans = -1; while(lo <= hi) { int mid = (lo + hi) >> 1; if(can(mid)) ans = mid, lo = mid+1; else hi = mid-1; } printf("%d\n", ans); return 0; }

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

mecho.cpp: In function 'int main()':
mecho.cpp:41:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &S);
  ~~~~~^~~~~~~~~~~~~~~~~
mecho.cpp:43:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %s", s[i]);
   ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...