Submission #540287

#TimeUsernameProblemLanguageResultExecution timeMemory
540287DeepessonWiring (IOI17_wiring)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h> #include "wiring.h" using ll = long long; ll myabs(ll x){ if(x<0)return x*(-1); return x; } typedef std::pair<ll,ll> pll; long long bestcusto(std::vector<int> anl,ll z){ ll best=1e9; for(auto&x:anl){ best=std::min(best,myabs(x-z)); } return best; } long long min_total_length(std::vector<int> r, std::vector<int> b) { ll variacao={}; std::vector<pll> alteracoes; for(auto&x:r)alteracoes.push_back({x,1}); for(auto&x:b)alteracoes.push_back({x,-1}); std::sort(alteracoes.begin(),alteracoes.end()); std::vector<ll> abreb,abrer,fechab,fechar; ll resp=0; for(auto&x:alteracoes){ ll cor = x.second,pos=x.first; if(cor==1){ if(resp<0){ fechar.push_back(pos); }else abrer.push_back(pos); resp++; }else { if(resp<=0){ abreb.push_back(pos); }else fechab.push_back(pos); resp--; } } ll ans=0; std::sort(abreb.begin(),abreb.end()); std::sort(abrer.begin(),abrer.end()); std::sort(fechab.begin(),fechab.end()); std::sort(fechar.begin(),fechar.end()); { std::vector<pll> penalidades; ll dif = myabs(r.size()-b.size()); if(resp>0){///Quantidade maior de vermelhos assert(abrer.size()>fechab.size()); /// std::cout<<abrer.size()<<" "<<fechab.size()<<":\n"; for(auto&x:abrer){ penalidades.push_back({bestcusto(b,x)-x,x}); } std::sort(penalidades.begin(),penalidades.end()); /// std::cout<<dif<<" "<<penalidades.size()<<"<-\n"; for(int i=0;i<dif;++i){ ans+=bestcusto(b,penalidades[i].second); /// std::cout<<"Remove "<<penalidades[i].second<<" "<< bestcusto(b,penalidades[i].second)<<" "<<ans<<"\n"; } abrer.clear(); for(int i=dif;i<penalidades.size();++i){ abrer.push_back(penalidades[i].second); } /// std::cout<<"Nov: "<<abreb.size()<<" "<<penalidades.size()<<"\n"; }else if(resp<0){ assert(abreb.size()>fechar.size()); /// std::cout<<abreb.size()<<" "<<fechar.size()<<":\n"; for(auto&x:abreb){ penalidades.push_back({bestcusto(r,x)-x,x}); } std::sort(penalidades.begin(),penalidades.end()); /// std::cout<<dif<<" "<<penalidades.size()<<"<-\n"; for(int i=0;i<dif;++i){ ans+=bestcusto(r,penalidades[i].second); /// std::cout<<"Remove "<<penalidades[i].second<<" "<< bestcusto(r,penalidades[i].second)<<" "<<ans<<"\n"; } abreb.clear(); for(int i=dif;i<penalidades.size();++i){ abreb.push_back(penalidades[i].second); } /// std::cout<<"Nov: "<<abreb.size()<<" "<<penalidades.size()<<"\n"; } } std::cout<<ans<<"!\n"; std::sort(abreb.begin(),abreb.end()); std::sort(abrer.begin(),abrer.end()); std::sort(fechab.begin(),fechab.end()); std::sort(fechar.begin(),fechar.end()); ///Abre B com Fecha R { std::cout<<abreb.size()<<" "<<fechar.size()<<"\n"; ll somab=0,somar=0; for(auto&x:abreb)somab+=x; for(auto&x:abreb)std::cout<<x<<" ";std::cout<<"\n"; for(auto&x:fechar)somar+=x; for(auto&x:fechar)std::cout<<x<<" ";std::cout<<"\n"; ll dif = myabs(abreb.size()-fechar.size()); ans+=somar-somab; ///Proxima etapa: guloso retirando conexoes std::deque<ll> aa,ba; for(auto&x:abreb){ aa.push_back(x+bestcusto(r,x)); } for(auto&x:fechar){ ba.push_back(bestcusto(b,x)-x); } std::sort(aa.begin(),aa.end()); std::sort(ba.begin(),ba.end()); for(int i=0;i!=aa.size();++i){ if(aa[i]+ba[i]<0)ans+=aa[i]+ba[i]; } } std::cout<<ans<<"!\n"; ///Abre R com Fecha B { std::cout<<abrer.size()<<" "<<fechab.size()<<"\n"; ll somab=0,somar=0; for(auto&x:abrer)somar+=x; for(auto&x:abrer)std::cout<<x<<" ";std::cout<<"\n"; for(auto&x:fechab)somab+=x; for(auto&x:fechab)std::cout<<x<<" ";std::cout<<"\n"; ll dif = myabs(abrer.size()-fechab.size()); ans+=somab-somar; ///Proxima etapa: guloso retirando conexoes std::deque<ll> aa,ba; for(auto&x:abrer){ aa.push_back(x+bestcusto(b,x)); } for(auto&x:fechab){ ba.push_back(bestcusto(r,x)-x); } std::sort(aa.begin(),aa.end()); std::sort(ba.begin(),ba.end()); for(int i=0;i!=aa.size();++i){ if(aa[i]+ba[i]<0)ans+=aa[i]+ba[i]; } } std::cout<<ans<<"!\n"; return ans; }

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:60:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |             for(int i=dif;i<penalidades.size();++i){
      |                           ~^~~~~~~~~~~~~~~~~~~
wiring.cpp:77:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |             for(int i=dif;i<penalidades.size();++i){
      |                           ~^~~~~~~~~~~~~~~~~~~
wiring.cpp:93:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   93 |         for(auto&x:abreb)std::cout<<x<<" ";std::cout<<"\n";
      |         ^~~
wiring.cpp:93:44: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   93 |         for(auto&x:abreb)std::cout<<x<<" ";std::cout<<"\n";
      |                                            ^~~
wiring.cpp:95:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   95 |         for(auto&x:fechar)std::cout<<x<<" ";std::cout<<"\n";
      |         ^~~
wiring.cpp:95:45: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   95 |         for(auto&x:fechar)std::cout<<x<<" ";std::cout<<"\n";
      |                                             ^~~
wiring.cpp:108:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |         for(int i=0;i!=aa.size();++i){
      |                     ~^~~~~~~~~~~
wiring.cpp:96:12: warning: unused variable 'dif' [-Wunused-variable]
   96 |         ll dif = myabs(abreb.size()-fechar.size());
      |            ^~~
wiring.cpp:118:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
  118 |         for(auto&x:abrer)std::cout<<x<<" ";std::cout<<"\n";
      |         ^~~
wiring.cpp:118:44: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  118 |         for(auto&x:abrer)std::cout<<x<<" ";std::cout<<"\n";
      |                                            ^~~
wiring.cpp:120:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
  120 |         for(auto&x:fechab)std::cout<<x<<" ";std::cout<<"\n";
      |         ^~~
wiring.cpp:120:45: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  120 |         for(auto&x:fechab)std::cout<<x<<" ";std::cout<<"\n";
      |                                             ^~~
wiring.cpp:133:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  133 |         for(int i=0;i!=aa.size();++i){
      |                     ~^~~~~~~~~~~
wiring.cpp:121:12: warning: unused variable 'dif' [-Wunused-variable]
  121 |         ll dif = myabs(abrer.size()-fechab.size());
      |            ^~~
wiring.cpp:17:8: warning: unused variable 'variacao' [-Wunused-variable]
   17 |     ll variacao={};
      |        ^~~~~~~~
#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...