Submission #565902

#TimeUsernameProblemLanguageResultExecution timeMemory
565902DeepessonICC (CEOI16_icc)C++17
100 / 100
114 ms524 KiB
#include <bits/stdc++.h> #include "icc.h" #define MAX 105 typedef std::pair<int,int> pii; int query(int size_a, int size_b, int a[], int b[]); int query(std::vector<int> a,std::vector<int> b){ for(auto&x:a)++x; for(auto&x:b)++x; return query(a.size(),b.size(),a.data(),b.data()); } void setRoad(int a, int b); void InformaRua(int a,int b){setRoad(a+1,b+1);} int pai[MAX]; int find(int a){ if(pai[a]==a){ return a; } return pai[a]=find(pai[a]); } void Union(int a,int b){ a=find(a); b=find(b); pai[a]=b; } std::vector<std::vector<int>> gerar_grupos(int N){ std::map<int,std::vector<int>> mapa; for(int i=0;i!=N;++i){ mapa[find(i)].push_back(i); } std::vector<std::vector<int>> res; for(auto&x:mapa){ res.push_back(x.second); } return res; } int splits[20]; int andar[MAX]; void dnc(int l,int r,int nv){ if(l==r)return; int m = (l+r)/2; for(int i=l;i<=m;++i)andar[i]+=(1<<nv); dnc(l,m,nv+1); dnc(m+1,r,nv+1); } void add(std::vector<int>& ref,std::vector<int> cp){ for(auto&x:cp)ref.push_back(x); } void pruning(std::vector<int>& a,std::vector<int> b){ while(a.size()!=1){ int m = a.size()/2; std::vector<int> c,d; for(int i=0;i<m;++i){ c.push_back(a[i]); } for(int i=m;i!=a.size();++i){ d.push_back(a[i]); } if(query(c,b)){ a=c; }else a=d; } } void run(int N) { for(int i=0;i!=MAX;++i)pai[i]=i; for(int i=1;i!=N;++i){ auto grups = gerar_grupos(N); memset(andar,0,sizeof(andar)); dnc(0,grups.size()-1,0); // printf("Gerun %d\n",grups.size()); std::vector<int> l,r; for(int j=0;j!=20;++j){ std::vector<int> a,b; for(int k=0;k!=grups.size();++k){ if(!(andar[k]&(1<<j))){ add(a,grups[k]); }else add(b,grups[k]); } // std::cout<<"check "<<a.size()<<" "<<b.size()<<"\n"; // std::cout<<"\n"; // for(auto&x:a)std::cout<<x<<" ";std::cout<<"\n"; // for(auto&x:b)std::cout<<x<<" ";std::cout<<"\n"; if(query(a,b)){ // std::cout<<"yey:)\n"; l=a; r=b; goto prox; } } prox: // printf("koi\n"); // for(auto&x:l)std::cout<<x<<" ";std::cout<<"\n"; //for(auto&x:r)std::cout<<x<<" ";std::cout<<"\n"; pruning(l,r); pruning(r,l); assert(r.size()==1); assert(l.size()==1); //printf("per\n"); InformaRua(l[0],r[0]); Union(l[0],r[0]); } }

Compilation message (stderr)

icc.cpp: In function 'void pruning(std::vector<int>&, std::vector<int>)':
icc.cpp:68:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         for(int i=m;i!=a.size();++i){
      |                     ~^~~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:87:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |             for(int k=0;k!=grups.size();++k){
      |                         ~^~~~~~~~~~~~~~
#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...