제출 #1023437

#제출 시각아이디문제언어결과실행 시간메모리
1023437xnqsJakarta Skyscrapers (APIO15_skyscraper)C++17
22 / 100
340 ms80468 KiB
#include <iostream> #include <fstream> #include <vector> #include <queue> #include <utility> #include <algorithm> #include <unordered_map> int x, dog_cnt; std::vector<std::pair<int,int>> dogs; std::unordered_map<int,int> dist[30005]; std::vector<int> dogs_in[30005]; int astar(int pos, int dog) { std::priority_queue<std::tuple<int,int,int>, std::vector<std::tuple<int,int,int>>, std::greater<std::tuple<int,int,int>>> pq; pq.emplace(0+std::abs(pos-dogs[1].first),pos,dog); dist[pos][dog] = 0; int iterations = 1800000; while (!pq.empty()&&iterations--) { auto [c, pos, dog] = pq.top(); pq.pop(); if (pos-dogs[dog].second>=0) { if (!dist[pos-dogs[dog].second].count(dog)||dist[pos-dogs[dog].second][dog]>dist[pos][dog]+1) { dist[pos-dogs[dog].second][dog] = dist[pos][dog]+1; pq.emplace(dist[pos-dogs[dog].second][dog]+std::abs((pos-dogs[dog].second)-dogs[1].first), pos-dogs[dog].second, dog); } } if (pos+dogs[dog].second<x) { if (!dist[pos+dogs[dog].second].count(dog)||dist[pos+dogs[dog].second][dog]>dist[pos][dog]+1) { dist[pos+dogs[dog].second][dog] = dist[pos][dog]+1; pq.emplace(dist[pos+dogs[dog].second][dog]+std::abs((pos+dogs[dog].second)-dogs[1].first), pos+dogs[dog].second, dog); } } for (const auto& i : dogs_in[pos]) { if (!dist[pos].count(i)||dist[pos][i]>dist[pos][dog]) { dist[pos][i] = dist[pos][dog]; pq.emplace(dist[pos][i]+std::abs(pos-dogs[1].first), pos, i); } } } int min = 0x3f3f3f3f; for (int i = 0; i < dog_cnt; i++) { if (!dist[dogs[1].first].count(i)) { continue; } min = std::min(min, dist[dogs[1].first][i]); } return ((min==0x3f3f3f3f) ? -1 : min); } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); std::cin >> x >> dog_cnt; dogs.reserve(dog_cnt); for (int i = 0, a, b; i < dog_cnt; i++) { std::cin >> a >> b; dogs.emplace_back(a,b); dogs_in[a].emplace_back(i); } std::cout << astar(dogs[0].first, 0) << "\n"; }
#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...