Submission #537391

#TimeUsernameProblemLanguageResultExecution timeMemory
537391OrazBJakarta Skyscrapers (APIO15_skyscraper)C++14
22 / 100
5 ms596 KiB
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for (int i = 0; i < n; i++) typedef long long ll; const ll INF = (ll)1e13; const int MAXN = 105, MAXP = 105, MAXM = 2005; int N, M; int B[MAXM], P[MAXM]; priority_queue<tuple<ll, int, int>> pq; ll dist[MAXN][MAXP]; bool powers[MAXN][MAXP]; ll solve() { REP(i, M) powers[B[i]][P[i]] = true; REP(i, N) REP(j, MAXP) dist[i][j] = INF; dist[B[0]][P[0]] = 0; pq.emplace(0, B[0], P[0]); while (!pq.empty()) { ll d; int building, power; tie(d, building, power) = pq.top(); pq.pop(); if (-d > dist[building][power]) continue; if (building == B[1]) return -d; // move for (int sign = -1; sign <= 1; sign += 2) { int new_building = building + sign * power; if (new_building < 0 || new_building >= N) continue; if (dist[new_building][power] > dist[building][power] + 1) { dist[new_building][power] = dist[building][power] + 1; pq.emplace(-dist[new_building][power], new_building, power); } } // pass news REP(new_power, MAXP) if (powers[building][new_power] && dist[building][new_power] > dist[building][power]) { dist[building][new_power] = dist[building][power]; pq.emplace(-dist[building][new_power], building, new_power); } } return -1; } int main() { cin >> N >> M; REP(i, M) cin >> B[i] >> P[i]; cout << solve() << endl; }
#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...