Submission #1180008

#TimeUsernameProblemLanguageResultExecution timeMemory
1180008julia_08Mecho (IOI09_mecho)C++20
84 / 100
142 ms11384 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 810; int dist[MAXN][MAXN], marc[MAXN][MAXN]; int dist_bee[MAXN][MAXN], marc_bee[MAXN][MAXN]; char a[MAXN][MAXN]; int n, s; pair<int, int> st, en; vector<pair<int, int>> bees; int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0}; bool in(int i, int j){ return 0 < i && i <= n && 0 < j && j <= n; } void bfs_bees(){ for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ dist_bee[i][j] = 1e9; } } queue<pair<int, int>> q; for(auto [i, j] : bees) q.push({i, j}), dist_bee[i][j] = 0, marc_bee[i][j] = 1; while(!q.empty()){ auto [i, j] = q.front(); q.pop(); for(int k=0; k<4; k++){ int ni = i + dx[k], nj = j + dy[k]; if(!in(ni, nj) || marc_bee[ni][nj] || a[ni][nj] == 'T' || a[ni][nj] == 'D') continue; marc_bee[ni][nj] = 1; dist_bee[ni][nj] = dist_bee[i][j] + 1; q.push({ni, nj}); } } } bool check(int t){ if(t < 0) return true; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ dist[i][j] = 1e9; marc[i][j] = 0; } } queue<pair<int, int>> q; q.push(st); dist[st.first][st.second] = 0; marc[st.first][st.second] = 1; while(!q.empty()){ auto [i, j] = q.front(); q.pop(); for(int k=0; k<4; k++){ int ni = i + dx[k], nj = j + dy[k]; if(!in(ni, nj) || marc[ni][nj] || a[ni][nj] == 'T') continue; if(dist_bee[ni][nj] <= t + (dist[i][j] + 1) / s) continue; marc[ni][nj] = 1; dist[ni][nj] = dist[i][j] + 1; q.push({ni, nj}); } } return (dist[en.first][en.second] < 1e9); } int bs(){ int l = -1, r = n * n; while(l < r){ int m = l + (r - l + 1) / 2; if(check(m)) l = m; else r = m - 1; } return l; } int main(){ cin.tie(0)->sync_with_stdio(0); cin >> n >> s; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ cin >> a[i][j]; if(a[i][j] == 'M') st = {i, j}; if(a[i][j] == 'D') en = {i, j}; if(a[i][j] == 'H') bees.push_back({i, j}); } } bfs_bees(); cout << bs() << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...