Submission #1022086

#TimeUsernameProblemLanguageResultExecution timeMemory
1022086ZanPMechanical Doll (IOI18_doll)C++17
Compilation error
0 ms0 KiB
#include "doll.h" #include <iostream> #include <vector> #include <algorithm> #include <unordered_map> using namespace std; void answer(vector<int> C, vector<int> X, vector<int> Y); struct xyswitch { int x, y; int par = 0; bool gox = true; bool active = true; xyswitch() {} xyswitch(int x, int y) { this->x = x; this->y = y; } }; struct xyswitch { int x, y; int par = 0; bool gox = true; bool active = true; xyswitch() {} xyswitch(int x, int y) { this->x = x; this->y = y; } }; vector<xyswitch> xyswitches; void make_switches(int m, int filler, int base_switch) { int f1 = min(filler, (m + filler) / 2), f2 = filler - f1; int s1 = ((m + filler) / 2) - f1, s2 = ((m + filler) / 2) - f2; xyswitches.push_back(xyswitch()); int sn = xyswitches.size() - 1; if (s1 == 0) { xyswitches[sn].x = -base_switch; } else if (s1 == 1 && f1 == 0) { xyswitches[sn].x = 0; } else { xyswitches[sn].x = -((int)xyswitches.size() + 1); make_switches(s1, f1, base_switch); xyswitches[-(xyswitches[sn].x) - 1].par = -(sn + 1); } if (s2 == 1 && f2 == 0) { xyswitches[sn].y = 0; } else { xyswitches[sn].y = -((int)xyswitches.size() + 1); make_switches(s2, f2, base_switch); xyswitches[-(xyswitches[sn].y) - 1].par = -(sn + 1); } } void connect(int val, int swid) { xyswitch & sw = xyswitches[-(swid)-1]; if (sw.gox) { sw.gox = !sw.gox; if (sw.x == 0) { sw.x = val; } else { connect(val, sw.x); } } else { sw.gox = !sw.gox; if (sw.y == 0) { sw.y = val; } else { connect(val, sw.y); } } } void create_circuit(int M, std::vector<int> A) { A.push_back(0); int n = A.size(); vector<int> c(M+1,0); int m = n, mxtwo = 1; while (mxtwo < m) { mxtwo *= 2; } make_switches(n, mxtwo - n, xyswitches.size() + 1); for (int j = 0; j < n; j++) { connect(A[j], -1); } vector<int> sums(xyswitches.size()); int sum = 0; for (int i = xyswitches.size() - 1; i >= 0; i--) { xyswitch & sw = xyswitches[i]; if (sw.x == sw.y) { sw.active = false; sum++; if (sw.par != 0) { xyswitch& swpar = xyswitches[-(sw.par) - 1]; if (swpar.x == -(i + 1)) { swpar.x = sw.x; } if (swpar.y == -(i + 1)) { swpar.y = sw.y; } } } sums[i] = sum; } for (int i = xyswitches.size() - 1; i >= 0; i--) { xyswitch& sw = xyswitches[i]; if (sw.x < 0) { int xid = -(sw.x) - 1; int xdif = sum - sums[xid]; sw.x = -(xid - xdif) - 1; } if (sw.y < 0) { int yid = -(sw.y) - 1; int ydif = sum - sums[yid]; sw.y = -(yid - ydif) - 1; } } for (int i = 0; i < M+1; i++) { c[i] = -1; } int s = xyswitches.size(); vector<int> x, y; x.reserve(s); y.reserve(s); c[0] = A[0]; for (int i = 0; i < s; i++) { if (!xyswitches[i].active)continue; x.push_back(xyswitches[i].x); y.push_back(xyswitches[i].y); } answer(c, x, y); }

Compilation message (stderr)

doll.cpp:16:8: error: redefinition of 'struct xyswitch'
   16 | struct xyswitch {
      |        ^~~~~~~~
doll.cpp:8:8: note: previous definition of 'struct xyswitch'
    8 | struct xyswitch {
      |        ^~~~~~~~