Submission #1075715

#TimeUsernameProblemLanguageResultExecution timeMemory
1075715raphaelpToy (CEOI24_toy)C++14
100 / 100
208 ms46864 KiB
#include <bits/stdc++.h> using namespace std; int main() { int W, H, K, L; cin >> W >> H >> L >> K; vector<vector<int>> dp(H, vector<int>(W, 0)); vector<vector<pair<int, int>>> cumH(H, vector<pair<int, int>>(W, {1000000, 1000000})), cumW(H, vector<pair<int, int>>(W, {1000000, 1000000})); int x1, x2, y1, y2; queue<pair<int, int>> Q; cin >> y1 >> x1 >> y2 >> x2; Q.push({x1, y2}); pair<int, int> targ; for (int i = 0; i < H; i++) { string S; cin >> S; for (int j = 0; j < W; j++) { if (S[j] == '*') targ = {i, j}; if (S[j] == 'X') { cumH[i][j].first = 0; cumH[i][j].second = 0; cumW[i][j].first = 0; cumW[i][j].second = 0; } } } for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { if (i == 0) { cumH[i][j].first = min(cumH[i][j].first, 1); } else { cumH[i][j].first = min(cumH[i][j].first, cumH[i - 1][j].first + 1); } if (j == 0) { cumW[i][j].first = min(cumW[i][j].first, 1); } else { cumW[i][j].first = min(cumW[i][j].first, cumW[i][j - 1].first + 1); } } } for (int i = H - 1; i >= 0; i--) { for (int j = W - 1; j >= 0; j--) { if (i == H - 1) { cumH[i][j].second = min(cumH[i][j].second, 1); } else { cumH[i][j].second = min(cumH[i][j].second, cumH[i + 1][j].second + 1); } if (j == W - 1) { cumW[i][j].second = min(cumW[i][j].second, 1); } else { cumW[i][j].second = min(cumW[i][j].second, cumW[i][j + 1].second + 1); } } } while (!Q.empty()) { int x = Q.front().first; int y = Q.front().second; Q.pop(); if (dp[x][y]) continue; dp[x][y] = 1; if (x > 0) { if (min(cumW[x][y].first, cumW[x - 1][y].first) + min(cumW[x][y].second, cumW[x - 1][y].second) > L) { Q.push({x - 1, y}); } } if (x < H - 1) { if (min(cumW[x][y].first, cumW[x + 1][y].first) + min(cumW[x][y].second, cumW[x + 1][y].second) > L) { Q.push({x + 1, y}); } } if (y > 0) { if (min(cumH[x][y].first, cumH[x][y - 1].first) + min(cumH[x][y].second, cumH[x][y - 1].second) > K) { Q.push({x, y - 1}); } } if (y < W - 1) { if (min(cumH[x][y].first, cumH[x][y + 1].first) + min(cumH[x][y].second, cumH[x][y + 1].second) > K) { Q.push({x, y + 1}); } } } if (dp[targ.first][targ.second]) cout << "YES"; else cout << "NO"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...