Submission #599472

#TimeUsernameProblemLanguageResultExecution timeMemory
599472definitelynotmeeDungeons Game (IOI21_dungeons)C++17
Compilation error
0 ms0 KiB
#include "dungeons.h" #include<bits/stdc++.h> using namespace std; #define ff first #define ss second #define all(x) x.begin(), x.end() using ll = long long; using pii = pair<int,int>; using pll = pair<ll,ll>; template<typename T> using matrix= vector<vector<T>>; const int T = 10000; struct jmp{ ll to, plus, win; jmp merge(jmp b){ jmp ret; ret.to = b.to; ret.plus = plus+b.plus; ret.win = min(win,b.win-plus); return ret; } }; jmp lift[15][24][400000]; vector<ll> windp; int N; vector<int> S, P, W, L; void init(int n, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) { N = n; S =s; P = p; W = w; L = l; int t = T; for(int x = 0; x < 15; x++){ for(int i = 0; i < n; i++){ if(s[i] <= t){ lift[x][0][i] = {w[i],s[i],1ll<<60}; if(w[i] == n){ lift[x][0][i].win = 0, lift[x][0][i].to = i; } } else {lift[x][0][i] = {l[i],p[i],s[i]}; if(l[i] == n) lift[x][0][i].win = 0, lift[x][0][i].to = i; } } for(int i = 1; i < 24; i++){ for(int j = 0; j < n; j++) lift[x][i][j] = lift[x][i-1][j].merge(lift[x][i-1][lift[x][i-1][j].to]); } t*=2; } windp = vector<ll>(n+1); for(int i = n-1; i >= 0; i--) windp[i] = windp[w[i]]+s[i]; return; } long long simulate(int x, int Z) { ll z = Z; int it = T; while(it-- && x != N){ if(S[x] <= z){ z+=S[x]; x=W[x]; } else { z+=P[x]; x=L[x]; } } int power = 0; while(x!=N && z < int(1e7)){ while(z >= T*(1<<power+1) && power < 14) power++; for(int i = 23; i>= 0; i--){ if(lift[power][i][x].win > z){ z+=lift[power][i][x].plus; x = lift[power][i][x].to; } } if(S[x] <= z){ z+=S[x]; x=W[x]; } else { z+=P[x]; x=L[x]; } } return z+windp[x]; }

Compilation message (stderr)

dungeons.cpp: In function 'long long int simulate(int, int)':
dungeons.cpp:80:25: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   80 |   while(z >= T*(1<<power+1) && power < 14)
      |                    ~~~~~^~
/tmp/ccIeDjNh.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