Submission #482132

# Submission time Handle Problem Language Result Execution time Memory
482132 2021-10-23T10:28:15 Z cheissmart Two Transportations (JOI19_transportations) C++14
0 / 100
133 ms 796 KB
#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, N = 2005;

namespace {
    V<pi> G[N];
    int d[N], vis[N];
    int n;
    priority_queue<pi, V<pi>, greater<pi>> pq;
    int state, last_dist;
    int u, dist, code, cnt;
    bool bad1, bad2;
    // 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(dist - last_dist == (1 << 9) - 1)
            return;
        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;
                pq.push({d[v], v});
            }
        }
    }

    void start() { 
        bad1 = bad2 = false;
        assert(state == 0);
        while(pq.size() && vis[pq.top().F])
            pq.pop();
        if(pq.empty()) {
            bad1 = true;
            dist = last_dist + (1 << 9) - 1;
        } else {
            tie(dist, u) = pq.top();
        }
        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;
    pq.push({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(code == (1 << 9) - 1)
                bad2 = true;
            if(last_dist + code < dist) {
                dist = last_dist + code;
                state = 2;
                code = 0;
                cnt = 0;
            } else {
                if(pq.size()) pq.pop();
                send_who(u);
                upd(dist, u);
                state = 0;
                code = 0;
                cnt = 0;
                if(!bad1 || !bad2)
                    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 throw;
}

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

#include "Baijan.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, N = 2005;
namespace {
    V<pi> G[N];
    int d[N], vis[N];
    int n;
    priority_queue<pi, V<pi>, greater<pi>> pq;
    int state, last_dist;
    int u, dist, code, cnt;
    // state
    // 0: wait A
    // 1: 

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

    void upd(int dist, int u) {
        if(dist - last_dist == (1 << 9) - 1)
            return;
        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;
                pq.push({d[v], v});
            }
        }
    }

    void start() { 
        assert(state == 0);
        while(pq.size() && vis[pq.top().F])
            pq.pop();
        if(pq.empty()) {
            dist = last_dist + (1 << 9) - 1;
        } else {
            tie(dist, u) = pq.top();
        }
    }
}  // namespace


void InitB(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;
    pq.push({d[0], 0});

    state = 0;
    last_dist = 0;
    code = 0;
    cnt = 0;
}

void ReceiveB(bool x) {
    if(state == 0) {
        code = code * 2 + x;
        cnt++;
        if(cnt == 9) {
            start();
            if(last_dist + code > dist) {
                if(pq.size()) pq.pop();
                cnt = 0;
                code = 0;
                state = 0;
                upd(dist, u);
                send_cost(dist - last_dist);
                send_who(u);
            } else {
                cnt = 0;
                code = 0;
                state = 1;
                send_cost(dist - last_dist);
                dist = last_dist + code;
            }
        }
    } else if(state == 1) {
        code = code * 2 + x;
        cnt++;
        if(cnt == 11) {
            u = code;
            cnt = 0;
            code = 0;
            state = 0;
            upd(dist, u);
        }
    }
}

Compilation message

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

Baijan.cpp: In function 'void {anonymous}::upd(int, int)':
Baijan.cpp:45:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   45 |         for(auto [v, w]:G[u]) {
      |                  ^
# Verdict Execution time Memory Grader output
1 Incorrect 40 ms 796 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 648 KB Output is correct
2 Incorrect 5 ms 760 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 38 ms 768 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 133 ms 688 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 133 ms 688 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 133 ms 688 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 40 ms 796 KB Output isn't correct
2 Halted 0 ms 0 KB -