Submission #1094519

#TimeUsernameProblemLanguageResultExecution timeMemory
1094519Math4Life2020Mechanical Doll (IOI18_doll)C++17
100 / 100
83 ms9456 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; using pii = pair<int,int>; const int INF = 1e9; int v2(int x) { return __builtin_ctz(x); } int l2(int x) { return (31-__builtin_clz(x)); } void create_circuit(int M, vector<int> A) { int N = A.size(); vector<int> C; C.push_back(A[0]); for (int i=0;i<M;i++) { C.push_back(-1); } vector<int> X,Y; int CIND = 0; int D = l2(2*N-1); stack<pii> bd; bd.push({N,D}); while (!bd.empty()) { pii p0 = bd.top(); bd.pop(); int k = p0.first; int d = p0.second; if (d<=1) { if (k==1) { X.push_back(0); Y.push_back(-INF); } else if (k==2) { X.push_back(-INF); Y.push_back(-INF); } else { cout << "reporting error #1\n"; } } else { if (k>(1<<(d-1))) { Y.push_back(CIND+1); X.push_back(CIND+(1<<(d-1))); bd.push({k-(1<<(d-1)),d-1}); bd.push({(1<<(d-1)),d-1}); } else { X.push_back(0); Y.push_back(CIND+1); bd.push({k,d-1}); } } CIND++; } /*cout << "INIT: print C:\n"; for (int c: C) { cout << c <<" "; } cout << "\nprint X: \n"; for (int x: X) { cout << x << " "; } cout << "\nprint Y: \n"; for (int y: Y) { cout << y << " "; }*/ vector<bool> st; for (int t=0;t<(1e6);t++) { st.push_back(false); } for (int t=0;t<N;t++) { int cx = 0; int locp = -1; bool stp = 0; while (cx >= 0) { if (st[cx]==0) { st[cx]=1; locp = cx; stp = 0; cx = X[cx]; } else { st[cx]=0; locp = cx; stp = 1; cx = Y[cx]; } } if (cx != -INF) { cout << "invalid value\n"; } else { int nval; if (t<(N-1)) { nval = A[t+1]; } else { nval = 0; } nval++; if (stp==0) { X[locp]=-INF+nval; } else { Y[locp]=-INF+nval; } } } for (int d=0;d<X.size();d++) { if (X[d]>=0) { X[d]=-1-X[d]; } else { X[d]=X[d]-(-INF+1); } if (Y[d]>=0) { Y[d]=-1-Y[d]; } else { Y[d]=Y[d]-(-INF+1); } } /*cout << "print C:\n"; for (int c: C) { cout << c <<" "; } cout << "\nprint X: \n"; for (int x: X) { cout << x << " "; } cout << "\nprint Y: \n"; for (int y: Y) { cout << y << " "; } cout << "\n";*/ answer(C,X,Y); }

Compilation message (stderr)

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