제출 #756343

#제출 시각아이디문제언어결과실행 시간메모리
756343drdilyorMechanical Doll (IOI18_doll)C++17
6 / 100
81 ms12720 KiB
#include<bits/stdc++.h>
#include "doll.h"
using namespace std;
using ll = long long;

void create_circuit(int m, std::vector<int> arr) {
    vector<int> c(m+1);
    vector<int> x, y;
    auto add = [&](int a, int b){
        x.push_back(a), y.push_back(b);
        return -(int)x.size();
    };

    int n = arr.size();
    vector<vector<int>> nxt(m+1);
    arr.push_back(0);
    for (int i = 0; i < n; i++) {
        nxt[arr[i]].push_back(arr[i+1]);
    }
    for (int i = 1; i <= m; i++) {
        if (nxt[i].empty()) {
            c[i] = 0;
        } else if (nxt[i].size() == 1) {
            c[i] = nxt[i][0];
        } else if (nxt[i].size() == 2) {
            c[i] = add(nxt[i][0], nxt[i][1]);
        } else if (nxt[i].size() == 4) {
            c[i] = add(
                    add(nxt[i][0], nxt[i][1]),
                    add(nxt[i][2], nxt[i][3]));
        } else if (nxt[i].size() == 3) {
            int t1 = add(0, nxt[i][1]);
            int t2 = add(nxt[i][0], nxt[i][2]);
            int t3 = c[i] = add(t1, t2);
            end(x)[-3] = t3;
        }
    }
    c[0] = arr[0];
    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...