제출 #540285

#제출 시각아이디문제언어결과실행 시간메모리
540285Deepesson전선 연결 (IOI17_wiring)C++17
0 / 100
1091 ms5980 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(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(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:fechar)somar+=x;
        ll dif = myabs(abreb.size()-fechar.size());
        ans+=somar-somab;
    }
    ///Abre R com Fecha B
    {
       /// std::cout<<abrer.size()<<" "<<fechab.size()<<"\n";
        ll somab=0,somar=0;
        for(auto&x:fechab)somab+=x;
        for(auto&x:abrer)somar+=x;
        ll dif = myabs(abrer.size()-fechab.size());
        ans+=somab-somar;
    }
    return ans;
}

컴파일 시 표준 에러 (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:94:12: warning: unused variable 'dif' [-Wunused-variable]
   94 |         ll dif = myabs(abreb.size()-fechar.size());
      |            ^~~
wiring.cpp:103:12: warning: unused variable 'dif' [-Wunused-variable]
  103 |         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...