Submission #1048756

#TimeUsernameProblemLanguageResultExecution timeMemory
1048756DorostWefDungeons Game (IOI21_dungeons)C++17
Compilation error
0 ms0 KiB
#include "dungeons.h" #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") using namespace std; typedef long long ll; #define F first #define S second #define mk make_pair typedef pair <int, ll> pii; const int N = 400023, LG = 24, L2 = 12, K = 3; int s[N], p[N], o[N], l[N], n; long long m[N], a[N]; pair <int, pii> nx[LG][N][L2]; const ll INF = 1e18; void init(int nn, std::vector<int> ss, std::vector<int> pp, std::vector<int> ww, std::vector<int> ll) { n = nn; for (int i = 0; i < n; i++) { s[i] = ss[i]; p[i] = pp[i]; o[i] = ww[i]; l[i] = ll[i]; } m[n] = 0; a[n] = 0; l[n] = n; o[n] = n; s[n] = 0; for (int i = n - 1; i >= 0; i--) { a[i] = a[o[i]] + s[i]; m[i] = max((long long)s[i], m[o[i]] - s[i]); } for (int w = 0; w < LG; w++) { for (int i = 0; i <= n; i++) { if (i < n && s[i] <= (1 << w)) { nx[w][i][0].F = o[i]; nx[w][i][0].S.F = 1e9; nx[w][i][0].S.S = s[i]; } else { nx[w][i][0].F = l[i]; nx[w][i][0].S.F = s[i] - 1; nx[w][i][0].S.S = p[i]; } } for (int j = 1; j < L2; j++) { for (int i = 0; i <= n; i++) { nx[w][i][j].S.S = nx[w][i][j - 1].S.S; nx[w][i][j].S.F = nx[w][i][j - 1].S.F; nx[w][i][j].F = nx[w][i][j - 1].F; for (int k = 0; k < K; k++) { int y = nx[w][i][j].F; nx[w][i][j].F = nx[w][y][j - 1].F; int wef = nx[w][y][j - 1].S.F - nx[w][i][j].S.S; if (wef < 0) wef = -1; if (nx[w][y][j - 1].S.F == 1e9) wef = 1e9; nx[w][i][j].S.F = min (nx[w][i][j].S.F, wef); nx[w][i][j].S.S = nx[w][i][j].S.S + nx[w][y][j - 1].S.S; } } } } return; } pair <int, long long> findd (int w, int x, ll z) { for (int i = L2 - 1; i >= 0; i--) { for (int k = 0; k < K; k++) { if (z <= nx[w][x][i].S.F) { z += nx[w][x][i].S.S; x = nx[w][x][i].F; } } } return {x, z}; } ll ans (int x, ll z) { if (z >= m[x]) return z + a[x]; int l = 0; while ((1 << l) < s[x]) l++; pair <int, ll> pp = findd (l, x, z); x = pp.F; z = pp.S; return ans (x, z); } long long simulate(int x, int z) { pair <int, ll> pp = findd (0, x, z); x = pp.F; z = pp.S; ll w = ans (x, z); return w; }

Compilation message (stderr)

/tmp/ccN3f2OY.o: in function `main':
grader.cpp:(.text.startup+0x178): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x17f): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x19d): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1a4): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1b0): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1b7): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1c3): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1ca): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1d6): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1dd): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1e9): additional relocation overflows omitted from the output
/usr/bin/ld: failed to convert GOTPCREL relocation; relink with --no-relax
collect2: error: ld returned 1 exit status