# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1026942 | 2024-07-18T14:24:50 Z | nisanduu | Mechanical Doll (IOI18_doll) | C++14 | 0 ms | 0 KB |
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; void create_circuit(int M, std::vector<int> A) { int N = A.size(); ll inf = 1e9; std::vector<int> C(M + 1,inf); vector<int> X,Y; map<int,int> mp; vector<int> unused; int sz = A.size(); int crMinus = -1; C[0] = crMinus; Y.push_back(A[0]); X.push_back(crMinus); crMinus--; //A.push_back(0); int ind=1; for(int i=0;i<(A.size()-1);i++){ //C[A[i]] = A[i+1]; if(mp[A[i]]){ int node = Y[mp[A[i]]]; Y[mp[A[i]]] = A[i+1]; X[mp[A[i]]] = node; continue; } C[A[i]] = crMinus; Y.push_back(A[i+1]); X.push_back(crMinus); mp[A[i]] = ind; ind++; crMinus--; } if(mp[A[sz-1]]){ int node = Y[mp[A[i]]]; Y[mp[A[i]]] = 0; X[mp[A[i]]] = node; //C[A[sz-1]]=0; }else{ C[A[sz-1]]=0; } for(int i=0;i<(M+1);i++){ if(C[i]==inf){ unused.push_back(i); } } sz = unused.size(); for(int i=0;i<(sz-1);i++){ C[unused[i]] = unused[i+1]; } if(sz>0){ C[unused[sz-1]] = 0; } //std::vector<int> X(N), Y(N); answer(C, X, Y); }