Submission #546426

#TimeUsernameProblemLanguageResultExecution timeMemory
546426jamezzzMechanical Doll (IOI18_doll)C++17
100 / 100
120 ms44456 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; vector<int> out[500005]; void create_circuit(int M,vector<int> A){ int N=A.size(); if(N==1){ vector<int> C(M+1,0); C[0]=A[0]; answer(C,{},{}); return; } vector<int> tmp; for(int i=0;i<N;++i){ tmp.push_back(A[i]); } tmp.push_back(0); vector<int> C(M+1); vector<int> X,Y; int pw=1; while(pw<=tmp.size())pw*=2; int extra=pw-tmp.size(); vector<int> ord[22]; ord[1].push_back(0); ord[1].push_back(1); for(int i=1;i<19;++i){ for(int j=0;j<ord[i].size();++j){ ord[i+1].push_back(ord[i][j]); ord[i+1].push_back(ord[i][j]+(1<<i)); } } int lg=31-__builtin_clz(pw); vector<bool> head(pw,false); for(int i=0;i<extra;++i)head[ord[lg][i]]=true; reverse(tmp.begin(),tmp.end()); for(int i=0;i<pw;++i){ if(head[i])out[M+1].push_back(-1); else{ out[M+1].push_back(tmp.back()); tmp.pop_back(); } } int cur=2; for(int i=0;i<M+cur;++i){ if(i<=M)C[i]=-1; else{ if(out[i].size()%2==1){ int x=out[i].back(); out[i].pop_back(); out[i].push_back(-i+M); out[i].push_back(x); } vector<int> l,r; for(int j=0;j<out[i].size();++j){ if(j%2==0)l.push_back(out[i][j]); else r.push_back(out[i][j]); } bool same=true; for(int j=0;j<l.size()-1;++j){ if(l[j]!=l[j+1]){ same=false; break; } } if(same)X.push_back(l[0]); else{ X.push_back(-cur); swap(out[M+cur],l); ++cur; } same=true; for(int j=0;j<r.size()-1;++j){ if(r[j]!=r[j+1]){ same=false; break; } } if(same)Y.push_back(r[0]); else{ Y.push_back(-cur); swap(out[M+cur],r); ++cur; } } } answer(C,X,Y); }

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:27:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |  while(pw<=tmp.size())pw*=2;
      |        ~~^~~~~~~~~~~~
doll.cpp:35:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |   for(int j=0;j<ord[i].size();++j){
      |               ~^~~~~~~~~~~~~~
doll.cpp:65:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |    for(int j=0;j<out[i].size();++j){
      |                ~^~~~~~~~~~~~~~
doll.cpp:71:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |    for(int j=0;j<l.size()-1;++j){
      |                ~^~~~~~~~~~~
doll.cpp:86:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |    for(int j=0;j<r.size()-1;++j){
      |                ~^~~~~~~~~~~
#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...