Submission #1224239

#TimeUsernameProblemLanguageResultExecution timeMemory
1224239guagua0407Dungeons Game (IOI21_dungeons)C++20
Compilation error
0 ms0 KiB
#pragma GCC optimize("Ofast")
#include "dungeons.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

namespace{
    const int mxn=4e5+5;
    const ll inf=(ll)1e18;
    const int k=9;
    int N;
    int S[mxn];
    int P[mxn];
    int W[mxn];
    int L[mxn];
    int id[mxn];
    struct node{
        ll sum;
        ll mn;
        int nxt;
    };
    inline node merge(node &a,node &b){
        node c;
        c.sum=a.sum+b.sum;
        c.nxt=b.nxt;
        c.mn=min(a.mn,b.mn-a.sum);
        return c;
    }
    struct graph{
        int bound;
        node st[mxn][25];
        inline void build(int _bound){
            bound=_bound;
            for(int i=0;i<=N;i++){
                st[i][0].nxt=(S[i]>bound?L[i]:W[i]);
                st[i][0].sum=(S[i]>bound?P[i]:S[i]);
                if(S[i]>bound or i==N){
                    st[i][0].mn=S[i];
                }
                else{
                    st[i][0].mn=inf;
                }
            }
            for(int j=1;j<25;j++){
                for(int i=0;i<=N;i++){
                    st[i][j]=merge(st[i][j-1],st[st[i][j-1].nxt][j-1]);
                }
            }
        }
        inline pair<int,ll> solve(int x,ll z){
            if(z>=S[x]){
                return {x,z};
            }
            node c;
            c.sum=(S[x]>bound?P[x]:S[x]);
            c.nxt=(S[x]>bound?L[x]:W[x]);
            c.mn=inf;
            for(int t=24;t>=0;t--){
                int cur=c.nxt;
                if(z+c.sum<st[cur][t].mn){
                    c=merge(c,st[cur][t]);
                }
            }
            int cur=c.nxt;
            z+=c.sum;
            return make_pair(cur,z);
        }
    };
    graph G[k];
}

void init(int _n, std::vector<int> _S, std::vector<int> _P, std::vector<int> _w, std::vector<int> _l) {
    N=_n;
    for(int i=0;i<N;i++){
        S[i]=_S[i];
        P[i]=_P[i];
        W[i]=_w[i];
        L[i]=_l[i];
    }
    W[N]=N;
    L[N]=N;
    for(int i=0;i<N;i++){
        id[i]=__lg(S[i]);
    }
    id[N]=k;
    for(int i=0;i<k;i++){
        G[i].build(1<<(i*3));
    }
	return;
}

long long simulate(int x, int Z) {
    ll z=Z;
    //cout<<'\n';
    while(x!=N){
        int t=min(27-1,(int)__lg(z));
        t=(t/3);
        //cout<<"st "<<x<<' '<<z<<'\n';
        tie(x,z)=G[t].solve(x,z);
        //cout<<"en "<<x<<' '<<z<<'\n';
        if(x==N) return z;
        if(z>=S[x]){
            z+=S[x];
            x=W[x];
        }
        else{
            z+=P[x];
            x=L[x];
        }
        if(x==N) return z;
    }
	return z;
}

Compilation message (stderr)

/tmp/ccWrZoyz.o: in function `main':
grader.cpp:(.text.startup+0x15e): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x165): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x183): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x18a): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x196): 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+0x1ac): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1b3): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1bf): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1c6): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1d2): additional relocation overflows omitted from the output
/usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(ios_init.o): in function `std::ios_base::Init::Init()':
(.text._ZNSt8ios_base4InitC2Ev+0x1c): failed to convert GOTPCREL relocation against '_ZNSt8ios_base4Init11_S_refcountE'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x1c6): failed to convert GOTPCREL relocation against '_ZSt4cout'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x260): failed to convert GOTPCREL relocation against '_ZSt3cin'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x2e2): failed to convert GOTPCREL relocation against '_ZSt4cerr'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x353): failed to convert GOTPCREL relocation against '_ZSt4clog'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x541): failed to convert GOTPCREL relocation against '_ZSt5wcout'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x5e5): failed to convert GOTPCREL relocation against '_ZSt4wcin'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x670): failed to convert GOTPCREL relocation against '_ZSt5wcerr'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x6e9): failed to convert GOTPCREL relocation against '_ZSt5wclog'; relink with --no-relax
/usr/bin/ld: final link failed
collect2: error: ld returned 1 exit status