#include "obstacles.h"
#include <bits/stdc++.h>
using namespace std;
static int n, m;
static vector<int> t_gl, h_gl;
static vector<vector<char>> ok;
static vector<vector<char>> vis;
void initialize(vector<int> T, vector<int> H) {
t_gl = T;
h_gl = H;
n = (int)T.size();
m = (int)H.size();
ok.assign(n, vector<char>(m, 0));
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
ok[i][j] = (T[i] > H[j]);
vis.assign(n, vector<char>(m, 0));
}
bool can_reach(int L, int R, int S, int D) {
if (S < L || S > R || D < L || D > R) return false;
if (!ok[0][S] || !ok[0][D]) return false;
for (int i=0;i<n;i++)
for (int j=L;j<=R;j++)
vis[i][j] = 0;
queue<pair<int,int>> q;
q.push({0, S});
vis[0][S] = 1;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
while (!q.empty()) {
auto [x,y] = q.front(); q.pop();
if (x == 0 && y == D) return true;
for (int k=0;k<4;k++) {
int nx = x + dx[k];
int ny = y + dy[k];
if (nx < 0 || nx >= n) continue;
if (ny < L || ny > R) continue;
if (!ok[nx][ny]) continue;
if (vis[nx][ny]) continue;
vis[nx][ny] = 1;
q.push({nx,ny});
}
}
return false;
}
| # | 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... |