Submission #92025

#TimeUsernameProblemLanguageResultExecution timeMemory
92025arman_ferdousMecho (IOI09_mecho)C++17
10 / 100
560 ms66560 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; const int N = 802; 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] = -1; q.push(mecho); dist[mecho.first][mecho.second] = 0; 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] / S + 1 + T; if(arrival > d[tx][ty] || dist[tx][ty] != -1) continue; dist[tx][ty] = dist[u.first][u.second] + 1; q.push({tx,ty}); } } return dist[home.first][home.second] != -1; } 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] + 1) continue; d[tx][ty] = d[u.first][u.second] + 1; 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; }

Compilation message (stderr)

mecho.cpp: In function 'int main()':
mecho.cpp:39: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:41: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...