Submission #975606

#TimeUsernameProblemLanguageResultExecution timeMemory
975606LucaIlie자동 인형 (IOI18_doll)C++17
84 / 100
159 ms262144 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int MAX_M = 1e5; const int MAX_L = (1 << 18); int ord[MAX_L]; vector<int> c, x, y; int switchid( int x ) { return -(x + 1); } int idswitch( int x ) { return -(x + 1); } vector<int> vert; vector<pair<int, int>> leafs; int P; void dfs( int v, int s, int l, bool canCut ) { vert.push_back( v ); if ( canCut && ((s >> l) & 1) ) { x[v] = -1; if ( l == 0 ) { leafs.push_back( { v, 1 } ); return; } dfs( v * 2 + 2, s, l - 1, canCut ); return; } if ( l == 0 ) { leafs.push_back( { v, 0 } ); leafs.push_back( { v, 1 } ); return; } dfs( v * 2 + 1, s, l - 1, canCut ); dfs( v * 2 + 2, s, l - 1, false ); } void create_circuit( int m, vector<int> a ) { int n = a.size(); c.resize( m + 1 ); a.push_back( 0 ); c[0] = a[0]; int p = ceil( log2( n ) ); x.resize( (1 << p) - 1 ); y.resize( (1 << p) - 1 ); for ( int v = 0; v < (1 << (p - 1)) - 1; v++ ) { x[v] = switchid( v * 2 + 1 ); y[v] = switchid( v * 2 + 2 ); } for ( int v = 0; v < (1 << p); v++ ) { int c = 0; for ( int b = 0; b < p; b++ ) { if ((v >> b) & 1 ) c += (1 << (p - 1 - b)); } ord[v] = c; } dfs( 0, (1 << p) - n, p - 1, true ); for ( int i = 1; i <= m; i++ ) c[i] = -1; vector<int> nrml( x.size() ); for ( int v = 0; v < x.size(); v++ ) nrml[v] = -1; sort( vert.begin(), vert.end() ); for ( int i = 0; i < vert.size(); i++ ) nrml[vert[i]] = i; vector<int> xaux( vert.size() ), yaux( vert.size() ); for ( int i = 0; i < vert.size(); i++ ) { xaux[i] = switchid( nrml[idswitch( x[vert[i]] )] ); yaux[i] = switchid( nrml[idswitch( y[vert[i]] )] ); } P = p; sort( leafs.begin(), leafs.end(), []( auto c, auto d ) { return ord[(c.first - (1 << (P - 1)) + 1) * 2 + c.second] < ord[(d.first - (1 << (P - 1)) + 1) * 2 + d.second]; } ); int ind = 1; for ( auto leaf: leafs ) { int v = nrml[leaf.first]; if ( leaf.second == 0 ) xaux[v] = a[ind]; else yaux[v] = a[ind]; ind++; } answer( c, xaux, yaux ); }

Compilation message (stderr)

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