Submission #1020968

#TimeUsernameProblemLanguageResultExecution timeMemory
1020968ZanPMechanical Doll (IOI18_doll)C++17
0 / 100
1080 ms2648 KiB
#include "doll.h" #include <iostream> #include <vector> #include <algorithm> #include <unordered_map> using namespace std; struct xyswitch { int x, y; xyswitch() {} xyswitch(int x, int y) { this->x = x; this->y = y; } }; void answer(vector<int> C, vector<int> X, vector<int> Y); vector<xyswitch> xyswitches; void make_switches(vector<int>& connected, int filler, int base_switch) { vector<int> s1, s2; int m = connected.size(); int f1 = min(filler, (m+filler)/2), f2 = filler - f1; for (int i = 0; i < m; i++) { if (i % 2 == 0) { if (i/2 >= f1) { s1.push_back(connected[i]); } else s2.push_back(connected[i]); } else { s2.push_back(connected[i]); } } int x, y; xyswitches.push_back(xyswitch()); int sn = xyswitches.size() - 1; if (s1.size() == 0) { xyswitches[sn].x = base_switch; } else if (s1.size() == 1) { xyswitches[sn].x = s1[0]; } else { xyswitches[sn].x = -((int)xyswitches.size() + 1); make_switches(s1, f1, base_switch); } if (s2.size() == 1) { xyswitches[sn].y = s2[0]; } else { xyswitches[sn].y = -((int)xyswitches.size()+1); make_switches(s2, f2, base_switch); } } void create_circuit(int M, std::vector<int> A) { int n = A.size(); unordered_map<int,int> visited; for (int i = 0; i < n; i++) { if (!visited.count(A[i])) { visited[A[i]] = 0; vector<int> connected; connected.reserve(n-i); for (int j = i; j < n; j++) { if (A[j] == A[i]) { (j == n - 1) ? connected.push_back(0) : connected.push_back(A[j + 1]); } } int m = connected.size(), mxtwo = 1; while (mxtwo < m) { mxtwo *= 2; } if (m == 1) { visited[A[i]] = connected[0]; } else { visited[A[i]] = -(int)xyswitches.size()-1; make_switches(connected, mxtwo - m, xyswitches.size()+1); } } } int s = xyswitches.size(); vector<int> c(M+1), x(s), y(s); c[0] = A[0]; for (int i = 1; i < M+1;i++) { if (visited.count(i)) { c[i] = visited[i]; } else { c[i] = i; } } for (int i = 0; i < s; i++) { x[i] = xyswitches[i].x; y[i] = xyswitches[i].y; } answer(c, x, y); }

Compilation message (stderr)

doll.cpp: In function 'void make_switches(std::vector<int>&, int, int)':
doll.cpp:27:9: warning: unused variable 'x' [-Wunused-variable]
   27 |     int x, y;
      |         ^
doll.cpp:27:12: warning: unused variable 'y' [-Wunused-variable]
   27 |     int 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...