Submission #295043

#TimeUsernameProblemLanguageResultExecution timeMemory
295043SeDunionMechanical Doll (IOI18_doll)C++14
53 / 100
293 ms38108 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 while(1); // else if (Y[gid(v)] < 0) // add (Y[gid(v)], f); } 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(); if (cnt == 1) { C[i] = g[i][0]; continue; } int l = 0; while (cnt > (1 << l)) ++l; assert ((1 << l) < 2 * cnt); // cout << l << " " << cnt << " q\n"; cnt = (1 << l) - 1; int s = r; C[i] = r--; X.push_back (MAXN); Y.push_back (MAXN); cnt--; while (cnt--) { add (C[i], r--); X.push_back (MAXN); Y.push_back (MAXN); } cnt = (1 << l); for (int ii = 0 ; ii + 1 < g[i].size() ; ++ ii) { add (C[i], g[i][ii]); --cnt; // cout << C[i] << " " << g[i][ii] << " add\n"; } --cnt; while (cnt--) { add (C[i], s); } add (C[i], g[i].back()); } // for (int i : C) cout << i << " "; cout << "\n"; // for (int i : X) cout << i << " "; cout << "\n"; // for (int i : Y) cout << i << " "; cout << "\n"; answer (C, X, Y); }

Compilation message (stderr)

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