Submission #612086

#TimeUsernameProblemLanguageResultExecution timeMemory
612086JomnoiMechanical Doll (IOI18_doll)C++17
6 / 100
139 ms28196 KiB
#include <bits/stdc++.h>
#include "doll.h"
using namespace std;

const int MAX_M = 1e5 + 5;

int N, M, S;
set <int> keepnxt[MAX_M];
vector <int> nxt[MAX_M];
vector<int> C, X, Y;

void create_circuit(int m, vector <int> A) {
    N = A.size(), M = m;
    C.resize(M + 1);

    A.push_back(0);
    for(int i = 0; i < N; i++) {
        if(keepnxt[A[i]].count(A[i + 1])) {
            continue;
        }

        keepnxt[A[i]].insert(A[i + 1]);
        nxt[A[i]].push_back(A[i + 1]);
    }

    C[0] = A[0];
    for(int a = 1; a <= M; a++) {
        if(nxt[a].empty()) {
            continue;
        }
        else if(nxt[a].size() == 1) {
            C[a] = nxt[a][0];
        }
        else {
            S++;
            C[a] = -S;
            if(nxt[a].size() == 2) {
                X.push_back(nxt[a][0]);
                Y.push_back(nxt[a][1]);
            }
            else if(nxt[a].size() == 3) {
                X.push_back(-(++S));
                Y.push_back(-(++S));

                X.push_back(nxt[a][0]);
                Y.push_back(-(S - 2));

                X.push_back(nxt[a][1]);
                Y.push_back(nxt[a][2]);
            }
            else if(nxt[a].size() == 4) {
                X.push_back(-(++S));
                Y.push_back(-(++S));

                X.push_back(nxt[a][0]);
                Y.push_back(nxt[a][2]);

                X.push_back(nxt[a][1]);
                Y.push_back(nxt[a][3]);
            }
        }
    }

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