Submission #1249188

#TimeUsernameProblemLanguageResultExecution timeMemory
1249188domiToy (CEOI24_toy)C++20
100 / 100
172 ms91084 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second #define sz(a) (int)((a).size()) #define all(a) (a).begin(), (a).end() #define lsb(x) (x & (-x)) #define vi vector<int> #define YES { cout << "YES" << endl; return; } #define NO { cout << "NO" << endl; return; } using ll = long long; using pii = std::pair<int, int>; const int dlin[] = {-1, 1, 0, 0}; const int dcol[] = {0, 0, -1, 1}; const int NMAX = 15e2; using namespace std; char mat[NMAX + 5][NMAX + 5]; int viz[NMAX + 5][NMAX + 5], n, m, K, L, xh, yh, xv, yv, xd, yd; int l[NMAX + 5][NMAX + 5], r[NMAX + 5][NMAX + 5], u[NMAX + 5][NMAX + 5], d[NMAX + 5][NMAX + 5]; void prec() { for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) l[i][j] = (mat[i][j] == 'X' ? j : l[i][j - 1]); r[i][m + 1] = m + 1; for (int j = m; j >= 1; --j) r[i][j] = (mat[i][j] == 'X' ? j : r[i][j + 1]); } for (int j = 1; j <= m; ++j) { for (int i = 1; i <= n; ++i) u[i][j] = (mat[i][j] == 'X' ? i : u[i - 1][j]); d[n + 1][j] = n + 1; for (int i = n; i >= 1; --i) d[i][j] = (mat[i][j] == 'X' ? i : d[i + 1][j]); } } bool inbound(int r, int c) { return (r >= 1 && r <= n && c >= 1 && c <= m); } bool tranzitie(int a, int b, int x, int y) { if (b == y) return min(r[a][b], r[x][y]) - max(l[a][b], l[x][y]) - 1 >= K; return min(d[a][b], d[x][y]) - max(u[a][b], u[x][y]) - 1 >= L; } void bfs() { queue<pii>Q; viz[yh][xv] = true; Q.push({yh, xv}); while (!Q.empty()) { auto [x, y] = Q.front(); Q.pop(); for (int dir = 0; dir < 4 ; ++dir) { int lin = x + dlin[dir]; int col = y + dcol[dir]; if (inbound(lin, col) && mat[lin][col] != 'X' && !viz[lin][col] && tranzitie(x, y, lin, col)) { viz[lin][col] = true; Q.push({lin, col}); } } } } signed main() { cin.tie(nullptr)->sync_with_stdio(false); cin >> m >> n >> K >> L >> xh >> yh >> xv >> yv; ++xh, ++yh; ++xv, ++yv; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cin >> mat[i][j]; if (mat[i][j] == '*') tie(xd, yd) = make_pair(i, j); } } prec(); bfs(); cout << (viz[xd][yd] ? "YES\n" : "NO\n"); return 0; }
#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...