Submission #472059

#TimeUsernameProblemLanguageResultExecution timeMemory
472059hhhhauraJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1096 ms246340 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 3e4, maxb = 175, maxv = 1.05e7, maxe = 2.1e7, magic = 1 << 20; int n, m, cnt, bnd, s, t, l, r, Q[magic + 3], pnt[maxb + 3][maxn + 3], tot, msk[maxe + 3], nxt[maxe + 3], lnk[maxv + 3], dist[maxv + 3]; bool vis[maxb + 3][maxb + 3]; void add(int u, int v, int w) { msk[++tot] = v * 2 + w; nxt[tot] = lnk[u], lnk[u] = tot; } int main() { scanf("%d %d", &n, &m); cnt = n, bnd = sqrt(m) + .5; for (int i = 1, b, p; i <= m; i++) { scanf("%d %d", &b, &p); b++; if (i == 1) s = b; if (i == 2) t = b; if (p > bnd) { int x = ++cnt, u = x, v; add(b, x, 0); for (int i = b - p; i >= 1; i -= p) { v = ++cnt; add(u, v, 1); add(v, i, 0); u = v; } u = x; for (int i = b + p; i <= n; i += p) { v = ++cnt; add(u, v, 1); add(v, i, 0); u = v; } } else { if (!vis[p][b % p]) { vis[p][b % p] = 1; int x = (b - 1) % p + 1; for (int i = x; i <= n; i += p) { add(pnt[p][i] = ++cnt, i, 0); if (i > x) { add(pnt[p][i], pnt[p][i - p], 1); add(pnt[p][i - p], pnt[p][i], 1); } } } add(b, pnt[p][b], 0); } } memset(dist, -1, sizeof(dist)); Q[r++] = s; dist[s] = 0; while (l != r) { int u = Q[l++]; if (l == magic) l = 0; if (u == t) break; for (int i = lnk[u], v, w; i; i = nxt[i]) { v = msk[i] >> 1, w = msk[i] & 1; if (~dist[v]) continue; dist[v] = dist[u] + w; if (w) { Q[r++] = v; if (r == magic) r = 0; } else { if (--l < 0) l = magic - 1; Q[l] = v; } } } printf("%d\n", dist[t]); return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:20:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:26:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |   scanf("%d %d", &b, &p);
      |   ~~~~~^~~~~~~~~~~~~~~~~
#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...