Submission #1032467

#TimeUsernameProblemLanguageResultExecution timeMemory
1032467LudisseyMechanical Doll (IOI18_doll)C++14
0 / 100
12 ms11744 KiB
#include "doll.h"
#include <bits/stdc++.h>
#define sz(a) (int)a.size()
#define all(x) (x).begin(), (x).end()
using namespace std;

void create_circuit(int M, std::vector<int> A){
    int N=sz(A);
    vector<int> C(M+1,0);
    vector<vector<int>> nxt(M+1);
    vector<int> X;
    vector<int> Y;
    for (int i = 1; i < N; i++)
    {
        nxt[A[i-1]].push_back(A[i]);
    }
    nxt[A[N-1]].push_back(0);
    C[0]=A[0];
    int trig=-1;
    for (int i = 1; i <= M; i++)
    {
        int logo=log2((sz(nxt[i])*2)-1) ;
        if(sz(nxt[i])==1){
            C[i]=nxt[i][0];
        }else if(logo==1){
            C[i]=trig;
            trig--;
            X.push_back(nxt[i][0]);
            Y.push_back(nxt[i][1]);
        }else if(logo==2){

            C[i]=trig;
            X.push_back(trig-1);
            Y.push_back(trig-2);
            X.push_back(nxt[i][0]);
            X.push_back(nxt[i][1]);
            if(sz(nxt[i])==3) {
                Y.push_back(trig);
                Y.push_back(nxt[i][2]);
            }
            else {
                Y.push_back(nxt[i][2]);
                Y.push_back(nxt[i][3]);
            }
            trig-=3;
        }else if(logo==3){;
            C[i]=trig;
            X.push_back(trig-1);
            Y.push_back(trig-2);
            X.push_back(trig-3);
            Y.push_back(trig-4);
            X.push_back(trig-5);
            Y.push_back(trig-6);
            X.push_back(nxt[i][0]);
            X.push_back(nxt[i][2]);
            X.push_back(nxt[i][1]);
            X.push_back(nxt[i][3]);
            if(sz(nxt[i])==8) {
                Y.push_back(nxt[i][4]);
                Y.push_back(nxt[i][6]);
                Y.push_back(nxt[i][5]);
                Y.push_back(nxt[i][7]);
            }else if(sz(nxt[i])==7) {
                Y.push_back(nxt[i][4]);
                Y.push_back(trig);
                Y.push_back(nxt[i][5]);
                Y.push_back(nxt[i][6]);
            }else if(sz(nxt[i])==6){
                Y.push_back(nxt[i][4]);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][5]);
            }else{
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][4]);
            }
            trig-=7;
        }else{
            C[i]=trig;

            X.push_back(trig-1);
            Y.push_back(trig-2);
            X.push_back(trig-3);
            Y.push_back(trig-4);
            X.push_back(trig-5);
            Y.push_back(trig-6);

            X.push_back(trig-7);
            Y.push_back(trig-8);
            X.push_back(trig-9);
            Y.push_back(trig-10);
            X.push_back(trig-11);
            Y.push_back(trig-12);
            X.push_back(trig-13);
            Y.push_back(trig-14);

            X.push_back(nxt[i][0]);
            X.push_back(nxt[i][4]);
            X.push_back(nxt[i][2]);
            X.push_back(nxt[i][6]);

            X.push_back(nxt[i][1]);
            X.push_back(nxt[i][5]);
            X.push_back(nxt[i][3]);
            X.push_back(nxt[i][7]);


            if(sz(nxt[i])==16) {
                Y.push_back(nxt[i][8]);
                Y.push_back(nxt[i][12]);
                Y.push_back(nxt[i][10]);
                Y.push_back(nxt[i][14]);
                Y.push_back(nxt[i][9]);
                Y.push_back(nxt[i][13]);
                Y.push_back(nxt[i][11]);
                Y.push_back(nxt[i][15]);
            }else if(sz(nxt[i])==15) {
                Y.push_back(nxt[i][8]);
                Y.push_back(nxt[i][12]);
                Y.push_back(nxt[i][10]);
                Y.push_back(trig);
                Y.push_back(nxt[i][9]);
                Y.push_back(nxt[i][13]);
                Y.push_back(nxt[i][11]);
                Y.push_back(nxt[i][14]);
            }else if(sz(nxt[i])==14){
                Y.push_back(nxt[i][8]);
                Y.push_back(nxt[i][12]);
                Y.push_back(nxt[i][10]);
                Y.push_back(trig);
                Y.push_back(nxt[i][9]);
                Y.push_back(trig);
                Y.push_back(nxt[i][11]);
                Y.push_back(nxt[i][13]);
            }else if(sz(nxt[i])==13){
                Y.push_back(nxt[i][8]);
                Y.push_back(trig);
                Y.push_back(nxt[i][10]);
                Y.push_back(trig);
                Y.push_back(nxt[i][9]);
                Y.push_back(trig);
                Y.push_back(nxt[i][11]);
                Y.push_back(nxt[i][12]);
            }else if(sz(nxt[i])==12){
                Y.push_back(nxt[i][8]);
                Y.push_back(trig);
                Y.push_back(nxt[i][10]);
                Y.push_back(trig);
                Y.push_back(nxt[i][9]);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][11]);
            }else if(sz(nxt[i])==11){
                Y.push_back(nxt[i][8]);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][9]);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][10]);
            }else if(sz(nxt[i])==10){
                Y.push_back(nxt[i][8]);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][9]);
            }else if(sz(nxt[i])==9){
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(trig);
                Y.push_back(nxt[i][8]);
            }
            trig-=15;
        }
    }
    for (int i = 0; i <= M; i++)
    {
        //cerr << C[i] << " ";
    }
    //cerr<<"\n";
    for (int i = 0; i < sz(Y); i++){
        //cerr << X[i] << " " << Y[i] << "\n";
    }

    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...