Submission #986096

#TimeUsernameProblemLanguageResultExecution timeMemory
986096alexddICC (CEOI16_icc)C++17
61 / 100
161 ms856 KiB
#include "icc.h" #include<bits/stdc++.h> using namespace std; mt19937 rnd(219348); int n; vector<int> comps[105]; int unde[105]; vector<int> ord,ord2; int aska[105],askb[105],sa,sb; int wirtz(int poz) { sa=sb=0; for(int i=0;i<=poz;i++) for(auto x:comps[ord[i]]) aska[sa++]=x; for(int i=poz+1;i<ord.size();i++) for(auto x:comps[ord[i]]) askb[sb++]=x; return query(sa,sb,aska,askb); } int boniface(int c1, int poz1, int c2) { sa=sb=0; for(int i=0;i<=poz1;i++) aska[sa++]=comps[c1][i]; for(auto x:comps[c2]) askb[sb++]=x; return query(sa,sb,aska,askb); } int frimpong(int le1, int ri1, int le2, int ri2) { sa=sb=0; for(int i=le1;i<=ri1;i++) aska[sa++]=ord2[i]; for(int i=le2;i<=ri2;i++) askb[sb++]=ord2[i]; return query(sa,sb,aska,askb); } void run(int N) { n=N; for(int i=1;i<=n;i++) { ord.push_back(i); comps[i].push_back(i); unde[i]=i; } for(int pas=1;pas<n;pas++) { do { shuffle(ord.begin(),ord.end(),rnd); }while(!wirtz((int)ord.size()/2-1)); ord2.clear(); for(auto c:ord) { shuffle(comps[c].begin(),comps[c].end(),rnd); for(auto x:comps[c]) ord2.push_back(x); } int aux=0; for(int i=0;i<=(int)ord.size()/2-1;i++) aux += (int)comps[ord[i]].size(); int st,dr,ans; st=aux; dr=(int)ord2.size()-2; ans=(int)ord2.size()-1; while(dr-st+1>3) { int mij=(st+dr)/2; if(frimpong(0,aux-1,aux,mij)) { ans=mij; dr=mij-1; } else st=mij+1; } for(int i=st;i<=dr;i++) { if(frimpong(0,aux-1,aux,i)) { ans=i; break; } } int vri = ord2[ans]; st=0; dr=aux-2; ans=aux-1; while(dr-st+1>3) { int mij=(st+dr)/2; if(frimpong(0,mij,aux,(int)ord2.size()-1)) { ans=mij; dr=mij-1; } else st=mij+1; } for(int i=st;i<=dr;i++) { if(frimpong(0,i,aux,(int)ord2.size()-1)) { ans=i; break; } } int vle = ord2[ans]; setRoad(vle,vri); int cle=unde[vle],cri=unde[vri]; for(auto x:comps[cri]) { comps[cle].push_back(x); unde[x]=cle; } comps[cri].clear(); shuffle(comps[cle].begin(),comps[cle].end(),rnd); bool sters=0; for(int i=0;i<ord.size();i++) { if(ord[i]==cri) { sters=1; ord.erase(ord.begin()+i); break; } } } }

Compilation message (stderr)

icc.cpp: In function 'int wirtz(int)':
icc.cpp:16:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for(int i=poz+1;i<ord.size();i++)
      |                     ~^~~~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:124:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |         for(int i=0;i<ord.size();i++)
      |                     ~^~~~~~~~~~~
icc.cpp:123:14: warning: variable 'sters' set but not used [-Wunused-but-set-variable]
  123 |         bool sters=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...