Submission #1015705

#TimeUsernameProblemLanguageResultExecution timeMemory
1015705andrei_iorgulescuJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1024 ms109664 KiB
#include <bits/stdc++.h> using namespace std; int hsh(pair<int,int> pr) { return pr.first * 31000 + pr.second; } pair<int,int> dehsh(int x) { return {x / 31000, x % 31000}; } int n,m; int b[30005],p[30005]; unordered_map<int, bool> viz,luat; unordered_map<int, int> d; vector<int> what[30005]; int str,fin; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for (int i = 1; i <= m; i++) cin >> b[i] >> p[i],what[b[i]].push_back(p[i]); str = b[1],fin = b[2]; deque<pair<int,int>> q; q.push_back({str,0}); viz[hsh({str,0})] = true; int lul = 1e7,cate = 0; while (!q.empty()) { pair<int,int> nod = q.front(); int dehnod = hsh(nod); q.pop_front(); if (luat[dehnod]) continue; cate++; if (cate > lul) assert(false); luat[dehnod] = true; int dist = d[dehnod]; if (nod.second != 0) { pair<int,int> vec; vec = {nod.first,0}; int dehvec = hsh(vec); if (!viz[dehvec] or d[dehvec] > dist) { viz[dehvec] = true; q.push_front(vec); d[dehvec] = dist; } vec = {nod.first + nod.second,nod.second}; dehvec = hsh(vec); if (!viz[dehvec] and vec.first >= 0 and vec.first < n) { viz[dehvec] = true; q.push_back(vec); d[dehvec] = dist + 1; } vec = {nod.first - nod.second,nod.second}; dehvec = hsh(vec); if (!viz[dehvec] and vec.first >= 0 and vec.first < n) { viz[dehvec] = true; q.push_back(vec); d[dehvec] = dist + 1; } } else { for (auto it : what[nod.first]) { pair<int,int> vec = {nod.first,it}; int dehvec = hsh(vec); if (!viz[dehvec] or d[dehvec] > dist) { viz[dehvec] = true; q.push_front(vec); d[dehvec] = dist; } } } } if (!viz[hsh({fin,0})]) cout << -1; else cout << d[hsh({fin,0})]; return 0; }
#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...