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...