Submission #294810

#TimeUsernameProblemLanguageResultExecution timeMemory
294810SeDunionMechanical Doll (IOI18_doll)C++14
6 / 100
117 ms47980 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 1e6; vector<int> g[MAXN]; vector<int> X, Y; int p[MAXN]; int gid (int x) { if (x==0)while(1); return abs(x)-1; } void add (int v, int f) { if (X[gid(v)] == MAXN) { X[gid(v)] = f; if (f < 0) p[gid(f)] = v; } else { if (X[gid(v)] < 0) add (X[gid(v)], f); else if (Y[gid(v)] < 0) add (Y[gid(v)], f); else assert (0); } swap (X[gid(v)], Y[gid(v)]); } void create_circuit(int M, vector<int> A) { int N = A.size(); vector<int> C(M + 1); g[0].push_back (A[0]); for (int i = 1 ; i < N ; ++ i) { g[A[i - 1]].push_back (A[i]); } g[A[N - 1]].push_back (0); int r = -1; for (int i = 0 ; i <= M ; ++ i) { if (g[i].empty()) continue; int cnt = g[i].size() - 1; if (!cnt) { C[i] = g[i][0]; continue; } // int l = 1; // while (cnt > (1 << (l + 1))) ++l; int s = r; C[i] = r--; X.push_back (MAXN); Y.push_back (MAXN); cnt--; while (cnt-- > 0) { add (C[i], r--); X.push_back (MAXN); Y.push_back (MAXN); } for (int ii = 0 ; ii < g[i].size() ; ++ ii) { add (C[i], g[i][ii]); } for (int ii = s ; ii > r ; -- ii) { if (X[gid(ii)] == MAXN && Y[gid(ii)] == MAXN) { X[gid(ii)] = Y[gid(ii)] = s; continue; } if (X[gid(ii)] == MAXN || Y[gid(ii)] == MAXN) { if (X[gid(ii)] == MAXN) X[gid(ii)] = s; if (Y[gid(ii)] == MAXN) Y[gid(ii)] = s; int v = ii; while (v < 0) { swap (X[gid(v)], Y[gid(v)]); v = p[gid(v)]; } } } } answer (C, X, Y); }

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:50:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for (int ii = 0 ; ii < g[i].size() ; ++ ii) {
      |                     ~~~^~~~~~~~~~~~~
#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...