Submission #139249

#TimeUsernameProblemLanguageResultExecution timeMemory
139249qrnoMechanical Doll (IOI18_doll)C++14
16 / 100
130 ms13932 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 100100; const int INF = 123456; const int SELF = 123321; vector<int> X, Y; vector<int> neigh[MAXN]; bool secondTime[MAXN]; int sCount = -1; int createSwitch(int x, int y) { X.push_back(x); Y.push_back(y); if (x == SELF) X[-sCount] = sCount; if (y == SELF) Y[-sCount] = sCount; return sCount--; } void printAns(vector<int> C, vector<int> X, vector<int> Y) { cout << "C: "; for (int x : C) cout << x << " "; cout << endl; cout << "(X, Y): "; for (int i = 0; i < (int)X.size(); i++) { cout << "(" << X[i] << ", " << Y[i] << ") "; } cout << endl; } void create_circuit(int M, std::vector<int> A) { vector<int> C(M + 1, INF); A.push_back(0); memset(secondTime, false, sizeof(secondTime)); for (int i = 0; i < (int)A.size()-1; i++) { neigh[A[i]].push_back(A[i+1]); } C[0] = A[0]; for (int i = 1; i <= M; i++) { int na = neigh[i].size(); if (na == 0) { C[i] = 0; } else if (na == 1) { C[i] = neigh[i][0]; } else if (na == 2) { C[i] = createSwitch(neigh[i][0], neigh[i][1]); } else if (na == 3) { int s1 = createSwitch(neigh[i][1], neigh[i][2]); int s2 = createSwitch(neigh[i][0], sCount-1); int s3 = createSwitch(s2, s1); C[i] = s3; } else if (na == 4) { C[i] = createSwitch(createSwitch(neigh[i][0], neigh[i][2]), createSwitch(neigh[i][1], neigh[i][3])); } } for (int i = 1; i <= M; i++) { if (C[i] == INF) C[i] = 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...