Submission #1071802

#TimeUsernameProblemLanguageResultExecution timeMemory
1071802Faisal_SaqibMechanical Doll (IOI18_doll)C++17
6 / 100
60 ms12100 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define vll vector<int> #define ll int void answer(std::vector<int> C, std::vector<int> X, std::vector<int> Y); vector<int> XP,YP; const int NM=1e6+10; ll cp[NM],final[NM],label=0,father_of_all=-1; vll fast_order(ll n) { if(n==2) return {1,2}; vll ans; ll hn=n/2; for(int i=1;i<=n;i+=2) ans.pb(i); vll hans(hn); vll np=fast_order(n/2); for(int j=0;j<hn;j++) hans[np[j]-1]=ans[j]; ans.clear(); for(auto i:hans) ans.pb(i); for(auto i:hans) ans.pb(i+1); return ans; } vll childx,childy,order_,npp; int label_it(vll&p,int l,int r,bool lp=0) { if((l-r)==0){ if(p[l]==-NM) { return father_of_all; } return p[l]; } int mid=(l+r)/2; bool use=0; for(int i=l;i<=r;i++) { if(p[i]!=-NM) { use=1; break; } } label++; int usep=-label; int fk=-1; if(!use) { fk=childx.size(); childx.pb(father_of_all); childy.pb(father_of_all); } else { int lc=label_it(p,l,mid,1); int rc=label_it(p,mid+1,r,1); fk=childx.size(); childx.pb(lc); childy.pb(rc); } order_.pb(fk); npp.pb(usep); return usep; } void create_circuit(int m, std::vector<int> a) { XP.clear(); YP.clear(); label=0; vector<int> ans(m+1); vector<int> child[m+2]; vector<int> cur; cur.pb(0); for(int j=0;j<a.size();j++) cur.pb(a[j]); cur.pb(0); for(int j=1;j<cur.size();j++) child[cur[j-1]].push_back(cur[j]); int lps=0; for(int i=0;i<=m;i++) { if(child[i].size()==0)continue; if(child[i].size()==1) { ans[i]=child[i][0]; } else { ll pw=1; while(child[i].size()>pw) pw*=2; int zxp=child[i].size( ); vll order=fast_order(pw); vll fl(pw,1); // cout<<"before\n"; for(int j=0;j<zxp;j++) fl[j]=child[i][j]; for(int j=zxp;j<pw;j++) fl[j]=-NM; // cout<<"After\n"; // for(int j=0;j<pw;j++) // { // cout<<fl[j]<<' '; // } // cout<<endl; ll og=label; father_of_all=-label-1; childx.clear(); childy.clear(); order_.clear(); npp.clear(); label_it(fl,0,pw-1); ll last=XP.size(); for(int i=0;i<order_.size();i++) { XP.pb(0); YP.pb(0); } for(int i=0;i<order_.size();i++) { ll cur=-og-npp[i]-1; XP[last+cur]=(childx[i]); YP[last+cur]=(childy[i]); } ans[i]=father_of_all; } } answer(ans,XP,YP); }

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:79:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |  for(int j=0;j<a.size();j++)
      |              ~^~~~~~~~~
doll.cpp:82:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |  for(int j=1;j<cur.size();j++)
      |              ~^~~~~~~~~~~
doll.cpp:95:25: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   95 |    while(child[i].size()>pw)
      |          ~~~~~~~~~~~~~~~^~~
doll.cpp:120:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  120 |    for(int i=0;i<order_.size();i++)
      |                ~^~~~~~~~~~~~~~
doll.cpp:125:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  125 |    for(int i=0;i<order_.size();i++)
      |                ~^~~~~~~~~~~~~~
doll.cpp:84:6: warning: unused variable 'lps' [-Wunused-variable]
   84 |  int lps=0;
      |      ^~~
#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...