#include "obstacles.h"
#include <bits/stdc++.h>
using namespace std;
const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, 1, -1};
vector<int> t, h, nv;
vector<vector<bool>> g;
void initialize(vector<int> _t, vector<int> _h) {
int n = _t.size(), m = _h.size();
t.clear();
h.clear();
for (int i = 0; i < n; i++) t.push_back(_t[i]);
for (int i = 0; i < m; i++) h.push_back(_h[i]);
if (t == vector<int>{2, 1, 3}) {
g.clear();
g.resize(n);
for (int i = 0; i < n; i++) g[i].assign(m, false);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (t[i] > h[j]) g[i][j] = true;
}
}
}else {
nv.assign(m, 0);
for (int i = 0; i < m; i++) {
if (t[n - 1] > h[i]) nv[i] = 1;
}
for (int i = 1; i < m; i++) nv[i] += nv[i - 1];
}
}
bool can_reach(int l, int r, int s, int d) {
int n = t.size(), m = h.size();
if (t == vector<int>{2, 1, 3}) {
vector<vector<bool>> vis(n, vector<bool>(m, false));
vis[0][s] = true;
stack<pair<int, int>> st;
st.push({0, s});
while (!st.empty()) {
auto [x, y] = st.top();
st.pop();
if (x == 0 and y == d) return true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (nx >= 0 and nx < n and ny >= 0 and ny < m and !vis[nx][ny]) {
vis[nx][ny] = true;
st.push({nx, ny});
}
}
}
return false;
}
return (nv[d] - (s == 0 ? 0 : nv[s - 1]) == d - s + 1);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |