제출 #1330587

#제출 시각아이디문제언어결과실행 시간메모리
1330587BigBadBullyDungeons Game (IOI21_dungeons)C++20
컴파일 에러
0 ms0 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
using namespace std;
const int inf = 2e18;
struct node{
    signed nxt;
    int mini =inf,sum= 0;
};
const int bv = 25;
const int mb = 9;

node lift[9][25][400001];
vector<int> stg,win,lose,pen;
void init(signed _n, vector<signed> _s, vector<signed> _p, vector<signed> _w, vector<signed> _l) {
	int n = _n;
    vector<int> s(n),p(n),w(n),l(n);
    for(int i = 0; i< n; i++)s[i]=_s[i],p[i]=_p[i],w[i]=_w[i],l[i]=_l[i];
    stg = s;
    win = w,lose = l,pen = p;
    vector<int> par(n+1,n);
    for(int i = 0; i < n; i++)
        par[i] = l[i];
    for(int i = 0; i < 9;i++)
        for(int j =0;j<25;j++)
            for(int k = 0; k <=n;k++)
                lift[i][j][k] = node();
    vector<int> c(n+1,0);
    for(int i = 0; i < n; i++)c[i]=p[i];
    for(int b = 0;b < bv;b++)
    {
        for(int i = 0; i < n; i++)
        {
            lift[b][0][i].nxt = par[i],lift[b][0][i].sum = c[i];
            if(__lg(s[i])==b)
                lift[b][0][i].mini = s[i];
            else
                lift[b][0][i].mini = inf;
        }
        for(int bit = 0;bit <mb;bit++)
            lift[b][bit][n].nxt=n;
        for(int bit=1;bit<mb;bit++)
            for(int i = 0; i < n; i++)
            {
                node&res = lift[b][bit][i];
                res = lift[b][bit-1][i];
                for(int it = 0;it < (1<<((bv+mb-1)/mb))-1;it++)
                {
                    node y = lift[b][bit-1][res.nxt];
                    res.nxt = lift[b][bit-1][res.nxt].nxt;
                    res.mini = min(res.mini,y.mini-res.sum);
                    res.sum+=y.sum;
                }
            }
        for(int i = 0; i < n;i++)
            if(__lg(s[i])<=b)
                par[i] = w[i],c[i]=s[i];
    }
    return;
}

void nxt(int&x,int&z)
{
    if(z>=stg[x])
            z+=stg[x],x = win[x];
        else
            z+=pen[x],x=lose[x];
}

long long simulate(signed _x, signed _z) {
    int x = _x,z=_z;
    int n = stg.size();
    for(int b = 0;b < bv&&x!=n;b++)
    {
        for(int bit = mb-1;bit >= 0;bit--)
        {
            node cur = lift[b][bit][x];
            while((b==bv-1||cur.sum+z < (1ll<<b+1)) && cur.nxt!=n && 
            (cur.mini>z))
                x = cur.nxt,z+=cur.sum,cur = lift[b][bit][x];
        }
        nxt(x,z);
    }
    return z;
}
#undef int

컴파일 시 표준 에러 (stderr) 메시지

dungeons.cpp: In function 'void init(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
dungeons.cpp:44:32: warning: iteration 9 invokes undefined behavior [-Waggressive-loop-optimizations]
   44 |             lift[b][bit][n].nxt=n;
      |             ~~~~~~~~~~~~~~~~~~~^~
dungeons.cpp:33:21: note: within this loop
   33 |     for(int b = 0;b < bv;b++)
      |                   ~~^~~~
/tmp/ccovDhqA.o: in function `main':
grader.cpp:(.text.startup+0x14a): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x151): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x16f): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x176): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x185): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x18c): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x198): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x19f): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1ab): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1b2): relocation truncated to fit: R_X86_64_PC32 against `.bss'
grader.cpp:(.text.startup+0x1be): additional relocation overflows omitted from the output
/usr/lib/gcc/x86_64-linux-gnu/13/libstdc++.a(ios_init.o): in function `std::ios_base::Init::Init()':
(.text._ZNSt8ios_base4InitC2Ev+0x1f): failed to convert GOTPCREL relocation against '_ZNSt8ios_base4Init11_S_refcountE'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x1ed): failed to convert GOTPCREL relocation against '_ZSt4cout'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x252): failed to convert GOTPCREL relocation against '_ZSt3cin'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x2bc): failed to convert GOTPCREL relocation against '_ZSt4cerr'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x316): failed to convert GOTPCREL relocation against '_ZSt4clog'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x50f): failed to convert GOTPCREL relocation against '_ZSt5wcout'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x57d): failed to convert GOTPCREL relocation against '_ZSt4wcin'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x5f0): failed to convert GOTPCREL relocation against '_ZSt5wcerr'; relink with --no-relax
(.text._ZNSt8ios_base4InitC2Ev+0x654): failed to convert GOTPCREL relocation against '_ZSt5wclog'; relink with --no-relax
/usr/bin/ld: final link failed
collect2: error: ld returned 1 exit status