제출 #482145

#제출 시각아이디문제언어결과실행 시간메모리
482145cheissmartTwo Transportations (JOI19_transportations)C++14
컴파일 에러
0 ms0 KiB
#include "Azer.h"
#include <bits/stdc++.h>
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define MP make_pair
#define EB emplace_back
#define ALL(v) (v).begin(), (v).end()

using namespace std;

typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;


const int INF = 1e9 + 7;

namespace {
    const int N = 2005;    
    V<pi> G[N];
    int d[N], vis[N];
    int n;
    int state, last_dist;
    int u, dist, code, cnt;
    // state
    // 0: to sent
    // 1: waiting B cost
    // 2: watting B for who

    void send_cost(int cost) {
        for(int i = 8; i >= 0; i--)
            SendA(cost >> i & 1);
    }
    void send_who(int who) {
        for(int i = 10; i >= 0; i--)
            SendA(who >> i & 1);
    }

    void upd(int dist, int u) {
        if(u == (1 << 11) - 1)
            return;
        assert(dist >= last_dist);
        assert(!vis[u]);
        d[u] = dist;
        vis[u] = 1;
        last_dist = dist;
        for(auto [v, w]:G[u]) {
            if(d[u] + w < d[v]) {
                d[v] = d[u] + w;
            }
        }
    }

    void start() { 
        assert(state == 0);
        dist = last_dist + (1 << 9) - 1, u = (1 << 11) - 1;
        for(int i = 0; i < n; i++) if(!vis[i]) {
            if(d[i] < dist) {
                dist = d[i];
                u = i;
            }
        }
        send_cost(dist - last_dist);
        state = 1;
    }

}  // namespace

void InitA(int _n, int A, vi u, vi v, vi c) {
    n = _n;
    for(int i = 0; i < A; i++) {
        G[u[i]].EB(v[i], c[i]);
        G[v[i]].EB(u[i], c[i]);
    }
    memset(d, 0x3f, sizeof(d[0]) * n);
    memset(vis, 0, sizeof(vis[0]) * n);
    d[0] = 0;

    state = 0;
    last_dist = 0;
    code = 0;
    cnt = 0;
    start();
}

void ReceiveA(bool x) {
    if(state == 1) {
        code = code * 2 + x;
        cnt++;
        if(cnt == 9) {
            if(last_dist + code < dist) {
                dist = last_dist + code;
                state = 2;
                code = 0;
                cnt = 0;
            } else {
                send_who(u);
                upd(dist, u);
                state = 0;
                code = 0;
                cnt = 0;
                if(u != (1 << 11) - 1)
                    start();
            }
        }
    } else if(state == 2) {
        code = code * 2 + x;
        cnt++;
        if(cnt == 11) {
            u = code;
            upd(dist, u);
            state = 0;
            code = 0;
            cnt = 0;
            start();
        }
     } else {
        while(1);
     }
}

vi Answer() {
    vi ans(n);
    for(int i = 0; i < n; i++) {
        assert(vis[i]);
        ans[i] = d[i];
    }
    return ans;
}

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

Azer.cpp: In function 'void {anonymous}::upd(int, int)':
Azer.cpp:50:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   50 |         for(auto [v, w]:G[u]) {
      |                  ^

/usr/bin/ld: /tmp/cclF6h07.o: in function `main':
grader_baijan.cpp:(.text.startup+0x174): undefined reference to `InitB(int, int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
/usr/bin/ld: grader_baijan.cpp:(.text.startup+0x202): undefined reference to `ReceiveB(bool)'
collect2: error: ld returned 1 exit status