Submission #132751

#TimeUsernameProblemLanguageResultExecution timeMemory
132751hugo_pmMechanical Doll (IOI18_doll)C++17
53 / 100
203 ms16056 KiB
#include "doll.h" #include <vector> #include <cassert> #include <iostream> using namespace std; vector<int> seqVoulue; vector<vector<int>> sortiesVoulues; vector<int> dirSort; vector<int> sw1, sw2; int lenSeq; int nbTriggers; int nbSwitchs = 0; int newSwitch() { ++nbSwitchs; sw1.push_back(0); sw2.push_back(0); return nbSwitchs; } void repartir(int switchId, vector<int> sortiesOrd) { assert(switchId > 0); int sz = sortiesOrd.size(); assert(sz >= 2); int IND = switchId-1; if (sz == 2) { sw1[IND] = sortiesOrd.front(); sw2[IND] = sortiesOrd.back(); } else { vector<vector<int>> subSor(2); for (int i = 0; i < sz; ++i) { subSor[i%2].push_back(sortiesOrd[i]); } if (subSor[0].size() > subSor[1].size()) { subSor[1].push_back(subSor[0].back()); subSor[0].back() = -switchId; } sw1[IND] = -newSwitch(); sw2[IND] = -newSwitch(); repartir(-sw1[IND], subSor[0]); repartir(-sw2[IND], subSor[1]); } } void create_circuit(int M, std::vector<int> A) { nbTriggers = M; seqVoulue = A; lenSeq = seqVoulue.size(); sortiesVoulues.resize(nbTriggers + 1); dirSort.resize(nbTriggers + 1); sortiesVoulues[0].push_back(seqVoulue.front()); for (int pos = 0; pos < lenSeq; ++pos) { int cur = seqVoulue[pos]; int suiv = 0; if (pos + 1 < lenSeq) { suiv = seqVoulue[pos+1]; } sortiesVoulues[cur].push_back(suiv); } for (int trig = 0; trig <= nbTriggers; ++trig) { int szVoulu = sortiesVoulues[trig].size(); if (szVoulu == 0) { dirSort[trig] = 0; } else if (szVoulu == 1) { dirSort[trig] = sortiesVoulues[trig].front(); } else { int sid = newSwitch(); dirSort[trig] = -sid; repartir(sid, sortiesVoulues[trig]); } } answer(dirSort, sw1, sw2); }
#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...