Submission #409914

#TimeUsernameProblemLanguageResultExecution timeMemory
409914ruadhanMechanical Doll (IOI18_doll)C++17
16 / 100
265 ms16008 KiB
#include <bits/stdc++.h>
#include "doll.h"
using namespace std;
#define sz(x) (int)x.size()

// void answer(vector<int> &C, vector<int> tmp1, vector<int> tmp2)
// {
//     for (auto &x : C)
//         cout << x << " ";
//     cout << '\n';
//     for (auto x : tmp1)
//         cout << x << " ";
//     cout << '\n';
//     for (auto x : tmp2)
//         cout << x << " ";
//     cout << '\n';
// }

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

    vector<int> make_switches;
    set<int> seen;

    vector<int> adj[M + 1];
    adj[0].push_back(A[0]);
    for (int i = 0; i < N; i++)
    {
        if (i < N - 1)
            adj[A[i]].push_back(A[i + 1]);
        else
            adj[A[i]].push_back(0);

        if (adj[A[i]].size() == 1)
            C[A[i]] = adj[A[i]][0];
        else if (seen.find(A[i]) == seen.end())
        {
            make_switches.push_back(A[i]);
            seen.insert(A[i]);
        }
    }

    int sz_switches = make_switches.size();
    // for (auto x : make_switches)
    //     cout << x << " ";
    // cout << '\n';
    vector<int> X, Y;
    int S = 0;
    for (int i = 0; i < sz_switches; i++)
    {
        int root_switch = -(++S);
        int trigger_id = make_switches[i];
        C[trigger_id] = root_switch;
        if (sz(adj[trigger_id]) == 2)
        {
            X.push_back(adj[trigger_id][0]);
            Y.push_back(adj[trigger_id][1]);
        }
        else
        {
            int left = -(++S);
            int right = -(++S);
            X.push_back(left), Y.push_back(right);
            if (sz(adj[trigger_id]) == 3)
            {
                X.push_back(adj[trigger_id][0]), Y.push_back(root_switch);
                X.push_back(adj[trigger_id][1]), Y.push_back(adj[trigger_id][2]);
            }
            else
            {
                X.push_back(adj[trigger_id][0]), Y.push_back(adj[trigger_id][2]);
                X.push_back(adj[trigger_id][1]), Y.push_back(adj[trigger_id][3]);
            }
        }
    }

    answer(C, X, Y);
}

// int main()
// {
//     vector<int> A = {1, 2, 1, 3, 1, 4};
//     int M = 4;
//     create_circuit(M, A);
//     return 0;
// }
#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...