# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
453335 | nonsensenonsense1 | Jakarta Skyscrapers (APIO15_skyscraper) | C++17 | 485 ms | 171460 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <vector>
#include <deque>
struct node {
int dist, step, pos;
bool vis;
node() {
vis = false;
dist = ~(1 << 31);
}
};
const int N = 30000;
const int K = 180;
int n, m;
node g[K][N], d[N][K];
std::vector<node *> top[N];
std::deque<node *> dq;
void go(node *cur, node *to, bool w)
{
if (to->dist > cur->dist + w) {
to->dist = cur->dist;
if (w) {
++to->dist;
dq.push_back(to);
}
else dq.push_front(to);
}
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < K; ++i) for (int j = 0; j < N; ++j) {
g[i][j].step = i;
g[i][j].pos = j;
}
int s, t;
for (int i = 0; i < m; ++i) {
int b, p;
scanf("%d%d", &b, &p);
if (!i) s = b;
if (i == 1) t = b;
if (p < K) top[b].push_back(g[p] + b);
else for (int j = b % p; j < N; j += p) {
if (j == b) top[b].push_back(d[i] + j / p);
d[i][j / p].step = p;
d[i][j / p].pos = j;
}
}
g[0][s].dist = 0;
dq.push_back(g[0] + s);
while (!dq.empty()) {
node *cur = dq.front();
dq.pop_front();
if (!cur->vis) {
cur->vis = true;
if (cur >= g[0] && cur < g[1]) for (int i = 0; i < (int)top[cur->pos].size(); ++i) go(cur, top[cur->pos][i], 0);
else {
go(cur, g[0] + cur->pos, 0);
if (cur->pos - cur->step >= 0) go(cur, cur >= g[0] && cur < g[K] ? cur - cur->step : cur - 1, 1);
if (cur->pos + cur->step < N) go(cur, cur >= g[0] && cur < g[K] ? cur + cur->step : cur + 1, 1);
}
}
}
if (g[0][t].dist == ~(1 << 31)) printf("-1\n");
else printf("%d\n", g[0][t].dist);
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... |