Submission #603931

#TimeUsernameProblemLanguageResultExecution timeMemory
603931cheissmartMechanical Doll (IOI18_doll)C++14
100 / 100
106 ms12136 KiB
#include "doll.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define V vector
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(v) int((v).size())
#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;

void create_circuit(int m, vi a) {
    a.PB(0);
    int n = SZ(a);
    vi x, y;
    int sz = 0;
    function<pair<int, V<pi>>(int, int)> dfs = [&] (int n, int m) -> pair<int, V<pi>> {
        assert(n >= 1);
        x.PB(0), y.PB(0);
        int u = -(++sz);
        V<pi> res;
        if(m == 2) {
            if(n == 1) res.EB(u, 0), res.EB(u, 3);
            else res.EB(u, 0), res.EB(u, 1);
        } else {
            int rsz = min(n, m / 2);
            int ul, ur;
            V<pi> resl, resr;
            tie(ur, resr) = dfs(rsz, m / 2);
            y[-u - 1] = ur;
            if(n - rsz) {
                tie(ul, resl) = dfs(n - rsz, m / 2);
                x[-u - 1] = ul;
            } else {
                for(int i = 0; i < m / 2; i++)
                    resl.EB(u, 2);
            }
            for(int i = 0; i < m / 2; i++) {
                res.PB(resl[i]);
                res.PB(resr[i]);
            }
        }
        assert(SZ(res) == m);
        return {u, res};
    };
    int mm = 1;
    while(mm < n) mm *= 2;
    auto [u, tt] = dfs(n, mm);
    x.resize(sz), y.resize(sz);
    int i = 0;
    for(auto[who, tp]:tt) {
        if(tp == 0) {
            x[-who - 1] = a[i++];
        } else if(tp == 1) {
            y[-who - 1] = a[i++];
        } else if(tp == 2) {
            x[-who - 1] = u;
        } else {
            y[-who - 1] = u;
        }
    }
    assert(i == n);
    vi c(m + 1, u);
    // for(int i = 0; i < SZ(x); i++)
        // cerr << -(i + 1) << ": " << x[i] << " "  << y[i] << endl;
    answer(c, x, y);
}

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, vi)':
doll.cpp:56:10: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   56 |     auto [u, tt] = dfs(n, mm);
      |          ^
doll.cpp:59:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   59 |     for(auto[who, tp]:tt) {
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...