Submission #847193

#TimeUsernameProblemLanguageResultExecution timeMemory
84719312345678Mechanical Doll (IOI18_doll)C++17
18 / 100
57 ms11152 KiB
#include "doll.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=2e5+1000;
int cnt, mx, used, id;
vector<int> v, X(nx), Y(nx);

void add(int idx, int layer)
{
    used=max(used, idx);
    if (layer==mx)
    {
        if (cnt>=1) Y[idx-1]=v[cnt--], X[idx-1]=v[cnt--];
        else if (cnt==0) Y[idx-1]=v[cnt--], X[idx-1]=-1;
    }
    else
    {
        int sid=id+1;
        add(++id, layer+1);
        Y[idx-1]=-sid;
        sid=id+1;
        if (cnt>=0) add(++id, layer+1), X[idx-1]=-sid;
        else X[idx-1]=-1;
    }
    //cout<<-idx<<' '<<X[idx-1]<<' '<<Y[idx-1]<<'\n';
}

void create_circuit(int M, std::vector<int> A) {
    vector<int> C(M+1);
    C[0]=-1; C[1]=-1;
    v=A;
    v.push_back(0);
    int N=v.size();
    cnt=N-1; mx=ceil(log2(N));
    add(++id, 1);
    X.resize(used); Y.resize(used);
    answer(C, X, Y);
}
#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...