Submission #1322274

#TimeUsernameProblemLanguageResultExecution timeMemory
1322274kasamchiMechanical Doll (IOI18_doll)C++20
16 / 100
46 ms11660 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

#define INF 1000000000

void create_circuit(int M, vector<int> A) {
    int N = A.size();
    A.push_back(0);

    vector<vector<int>> edge(M + 1);
    for (int k = 0; k < N; k++) {
        edge[A[k]].push_back(A[k + 1]);
    }

    vector<int> C(M + 1), swt(M + 1, -1);
    vector<int> X, Y;
    C[0] = A[0];
    for (int i = 1; i <= M; i++) {
        if (edge[i].empty()) {}
        else if (edge[i].size() == 1) {
            C[i] = edge[i][0];
        } else if (edge[i].size() == 2) {
            C[i] = -X.size() - 1;
            X.push_back(edge[i][0]), Y.push_back(edge[i][1]);
        } else {
            int a = -X.size() - 1, b = -X.size() - 2, c = -X.size() - 3;
            if (edge[i].size() == 3) {
                C[i] = a;
                X.push_back(b), Y.push_back(c);
                X.push_back(edge[i][0]), Y.push_back(a);
                X.push_back(edge[i][1]), Y.push_back(edge[i][2]);
            } else {
                C[i] = a;
                X.push_back(b), Y.push_back(c);
                X.push_back(edge[i][0]), Y.push_back(edge[i][2]);
                X.push_back(edge[i][1]), Y.push_back(edge[i][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...