Submission #294901

#TimeUsernameProblemLanguageResultExecution timeMemory
294901kshitij_sodani자동 인형 (IOI18_doll)C++14
16 / 100
124 ms15672 KiB
#include <bits/stdc++.h> using namespace std; #define a first #define b second #define pb push_back #define mp make_pair typedef long long llo; #include "doll.h" vector<int> pre[100001]; //vector<int> adj[100001]; vector<int> ac; vector<int> x; vector<int> y; int cur=0; int cot; pair<int,int> adj[1000001]; int stt[1000001]; void con(int ind,int tot,int dd){ x.pb(0); y.pb(0); if(ind==tot-1){ /*x.pb(0); y.pb(0);*/ } else{ adj[-dd]={-cur+1,-cur+2}; x[-dd-1]=cur-1; y[-dd-1]=cur-2; cur--; cur--; int ba=cur; con(ind+1,tot,cur+1); con(ind+1,tot,ba); } } void create_circuit(int m, vector<int> aa) { int n=aa.size(); for(int i=0;i<=m;i++){ ac.pb(0); } ac[0]=aa[0]; for(int i=0;i<aa.size()-1;i++){ pre[aa[i]].pb(aa[i+1]); } pre[aa.back()].pb(0); for(int i=1;i<=m;i++){ cot=i; if(pre[i].size()==0){ continue; } if(pre[i].size()==1){ ac[i]=pre[i][0]; } else{ int xx=pre[i].size(); int dep=0; for(int j=0;j<=19;j++){ if((1<<j)>=xx){ dep=j; break; } } // cout<<dep<<endl; cur--; ac[i]=cur; con(0,dep,cur); int op=(1<<dep); int ind2=0; for(int j=0;j<(1<<dep);j++){ int st=-ac[i]; //cout<<j<<",,"<<endl; for(int jj=0;jj<dep-1;jj++){ if(stt[st]==0){ stt[st]=1-stt[st]; st=adj[st].a; } else{ stt[st]=1-stt[st]; st=adj[st].b; } } op--; // cout<<j<<":"<<st<<endl; if(op<pre[i].size()){ //cout<<stt[st]<<",,"<<pre[i][ind2]<<endl; if(stt[st]==0){ x[st-1]=pre[i][ind2]; } else{ y[st-1]=pre[i][ind2]; } stt[st]=1-stt[st]; ind2++; } else{ if(stt[st]==0){ x[st-1]=ac[i]; } else{ y[st-1]=ac[i]; } stt[st]=1-stt[st]; } } } /*else if(pre[i].size()==2){ cur--; ac[i]=cur; x.pb(pre[i][0]); y.pb(pre[i][1]); } else if(pre[i].size()==3){ cur--; ac[i]=cur; x.pb(cur-1); y.pb(cur-2); cur--; x.pb(pre[i][0]); y.pb(cur+1); cur--; x.pb(pre[i][1]); y.pb(pre[i][2]); } else if(pre[i].size()==4){ cur--; ac[i]=cur; x.pb(cur-1); y.pb(cur-2); cur--; x.pb(pre[i][0]); y.pb(pre[i][2]); cur--; x.pb(pre[i][1]); y.pb(pre[i][3]); }*/ } if(x.size()>2*n){ while(true){ continue; } } /*for(auto j:ac){ cout<<j<<","; } cout<<endl; for(auto j:x){ cout<<j<<","; } cout<<endl; for(auto j:y){ cout<<j<<","; } cout<<endl;*/ answer(ac,x,y); }

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:44:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |  for(int i=0;i<aa.size()-1;i++){
      |              ~^~~~~~~~~~~~
doll.cpp:89:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |     if(op<pre[i].size()){
      |        ~~^~~~~~~~~~~~~~
doll.cpp:142:13: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  142 |  if(x.size()>2*n){
      |     ~~~~~~~~^~~~
#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...