제출 #393642

#제출 시각아이디문제언어결과실행 시간메모리
393642loctildoreJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
423 ms262148 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define x first #define y second #define elif else if #define endl '\n' #define all(x) begin(x), end(x) template <typename T> ostream& operator << (ostream& os, const vector<T>& a) { os << '['; bool E = false; for(const T& x : a) { if(E) os << ' '; os << x; E = true; } return os << ']'; } int n,m; int b[30069],p[30069]; vector<pair<int,int>> grph[201*30069]; int done[201*30069]; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>m; for (int i = 1; i <= 200; i++) { for (int j = 0; j < n-i; j++) { grph[j+i*30069].push_back({1,j+i+i*30069}); grph[j+i+i*30069].push_back({1,j+i*30069}); } for (int j = 0; j < n; j++) { grph[j+i*30069].push_back({0,j}); } } for (int i = 0; i < m; i++) { cin>>b[i]>>p[i]; if (p[i]<=200) { grph[b[i]].push_back({0,b[i]+p[i]*30069}); } else{ for (int j = b[i]%p[i]; j < n; j+=p[i]) { grph[b[i]].push_back({abs(b[i]-j)/p[i],j}); } } } pq.push({0,b[0]}); while (pq.size()) { auto temp=pq.top(); pq.pop(); if (done[temp.s]) { continue; } done[temp.s]=true; if (temp.s==b[1]) { cout<<temp.f<<endl; return 0; } for (auto i : grph[temp.s]) { pq.push({temp.f+i.f,i.s}); } } cout<<-1<<endl; 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...