Submission #1299672

#TimeUsernameProblemLanguageResultExecution timeMemory
1299672gaboObstacles for a Llama (IOI25_obstacles)C++20
0 / 100
2094 ms2162688 KiB
#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 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...
#Verdict Execution timeMemoryGrader output
Fetching results...