제출 #986092

#제출 시각아이디문제언어결과실행 시간메모리
986092alexddICC (CEOI16_icc)C++17
61 / 100
150 ms856 KiB
#include "icc.h" #include<iostream> #include<vector> #include<algorithm> using namespace std; 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 { random_shuffle(ord.begin(),ord.end()); }while(!wirtz((int)ord.size()/2-1)); ord2.clear(); for(auto c:ord) { random_shuffle(comps[c].begin(),comps[c].end()); 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(); random_shuffle(comps[cle].begin(),comps[cle].end()); bool sters=0; for(int i=0;i<ord.size();i++) { if(ord[i]==cri) { sters=1; ord.erase(ord.begin()+i); break; } } } }

컴파일 시 표준 에러 (stderr) 메시지

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