Submission #740454

#TimeUsernameProblemLanguageResultExecution timeMemory
740454danikoynovMechanical Doll (IOI18_doll)C++14
6 / 100
107 ms14896 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 2e5 + 10; int n, m; vector < int > g[maxn]; vector < int > c, x, y; struct state { int dev, lf_child, rf_child; vector < int > fin; state() { dev = 0; lf_child = rf_child = -1; fin.clear(); } }; void create_node(int v) { if (g[v].size() == 0) return; if (g[v].size() == 1) { c[v] = g[v][0]; return; } int nec = 2, st = 0; while(nec < g[v].size()) nec *= 2, st ++; ///cout << nec << " : " << st << endl; vector < state > gen; int sz = x.size(); state it; it.dev = ++ sz; c[v] = -it.dev; it.fin.push_back(1); gen.push_back(it); for (int step = 0; step < st; step ++) { vector < state > new_gen; for (int i = 0; i < gen.size(); i ++) { state new_state; new_state.dev = ++ sz; gen[i].lf_child = - new_state.dev; for (int cur : gen[i].fin) new_state.fin.push_back(cur * 2 - 1); new_gen.push_back(new_state); new_state = state(); new_state.dev = ++ sz; gen[i].rf_child = - new_state.dev; for (int cur : gen[i].fin) new_state.fin.push_back(cur * 2); new_gen.push_back(new_state); } for (state cur : gen) { x.push_back(cur.lf_child); y.push_back(cur.rf_child); } gen = new_gen; } ///cout << "fine" << endl; for (int i = 0; i < gen.size(); i ++) { ///cout << gen[i].fin.size() << endl; int lf_path = gen[i].fin[0] * 2 - 1, rf_path = gen[i].fin[0] * 2; ///cout << v << " :: " << lf_path << " : " << rf_path << endl; if (lf_path <= g[v].size()) x.push_back(g[v][lf_path - 1]); else x.push_back(- it.dev); if (rf_path <= g[v].size()) y.push_back(g[v][rf_path - 1]); else y.push_back(-it.dev); } } void create_circuit(int M, vector<int> A) { n = A.size(); m = M; c.resize(m + 1); g[0].push_back(A[0]); for (int i = 1; i < A.size(); i ++) { g[A[i - 1]].push_back(A[i]); } g[A.back()].push_back(0); for (int i = 0; i <= m; i ++) { create_node(i); continue; } /**for (int i = 0; i <= m; i ++) cout << c[i] << " "; cout << endl; for (int i = 0; i < x.size(); i ++) cout << x[i] << " " << y[i] << endl;*/ answer(c, x, y); }

Compilation message (stderr)

doll.cpp: In function 'void create_node(int)':
doll.cpp:27:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   27 |     if (g[v].size() == 0)
      |     ^~
doll.cpp:30:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   30 |         if (g[v].size() == 1)
      |         ^~
doll.cpp:36:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |         while(nec < g[v].size())
      |               ~~~~^~~~~~~~~~~~~
doll.cpp:49:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<state>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |             for (int i = 0; i < gen.size(); i ++)
      |                             ~~^~~~~~~~~~~~
doll.cpp:73:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<state>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |         for (int i = 0; i < gen.size(); i ++)
      |                         ~~^~~~~~~~~~~~
doll.cpp:78:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |             if (lf_path <= g[v].size())
      |                 ~~~~~~~~^~~~~~~~~~~~~~
doll.cpp:82:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |             if (rf_path <= g[v].size())
      |                 ~~~~~~~~^~~~~~~~~~~~~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:95:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for (int i = 1; i < A.size(); i ++)
      |                     ~~^~~~~~~~~~
#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...