# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
139221 | abacaba | Jakarta Skyscrapers (APIO15_skyscraper) | C++14 | 1078 ms | 2812 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int inf = 2e9;
const int N = 3e4 + 1;
int n, m, d[N];
vector <pair <int, int> > g[N];
pair <int, int> a[N];
unordered_set <int> mod_used[N];
priority_queue <pair <int, int> > q;
int main() {
fill(d, d + N, inf);
scanf("%d%d", &n, &m);
for(int i = 0; i < m; ++i)
scanf("%d%d", &a[i].first, &a[i].second);
d[a[0].first] = 0;
q.push({0, 0});
while(!q.empty()) {
int i = q.top().second, dist = -q.top().first;
int b = a[i].first, p = a[i].second;
int pos = b;
q.pop();
if(mod_used[p].find(b) != mod_used[p].end())
continue;
if(dist > d[b])
continue;
mod_used[p].insert(b);
int cnt = 0;
while(b - p >= 0) {
b -= p;
++cnt;
if(d[b] > d[pos] + cnt) {
d[b] = d[pos] + cnt;
q.push({-d[b], b});
}
}
b = a[i].first;
cnt = 0;
while(b + p < n) {
b += p;
++cnt;
if(d[b] > d[pos] + cnt) {
d[b] = d[pos] + cnt;
q.push({-d[b], b});
}
}
}
if(d[a[1].first] == inf)
puts("-1");
else
printf("%d\n", d[a[1].first]);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |