Submission #296715

#TimeUsernameProblemLanguageResultExecution timeMemory
296715DanerZein전선 연결 (IOI17_wiring)C++14
0 / 100
1080 ms6760 KiB
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
int vis[200010];
long long min_total_length(std::vector<int> r, std::vector<int> b) {
  vector<ii> rb;
  vector<ii> ra,ba;
  for(int i=0;i<r.size();i++){
    rb.push_back(ii(r[i],1));
  }
  for(int i=0;i<b.size();i++){
    rb.push_back(ii(b[i],2));
  }
  int pr,pb;
  pr=pb=0;
  sort(rb.begin(),rb.end());
  for(int i=0;i<rb.size();i++){
    if(r[pr]==rb[i].first){
      ra.push_back(ii(r[pr],i));
      pr++;
    }
    else{
      ba.push_back(ii(b[pb],i));
      pb++;
    }
  }
  long long res=0;
  memset(vis,0,sizeof vis);
  for(int i=0;i<rb.size();i++){
    if(vis[i]==1) continue;
    if(rb[i].second==1){
      vector<ii>::iterator it;
      it=lower_bound(ba.begin(),ba.end(),ii(rb[i].first,0));
      if(it==ba.end()) it--;
      int x=it-ba.begin();
      while(true){
	if(vis[(*it).second]==0 or it==ba.end()){
	  break;
	}
	it++;
      }
      //cout<<rb[i].first<<" "<<(*it).first<<endl;
      if(it!=ba.end()){
	vis[i]=1;
	vis[(*it).second]=1;
	res+=abs((*it).first-rb[i].first);
      }
      else{
	vis[i]=1;
	res+=abs(rb[i].first-ba[x].first);
      }
    }
    else{
      vector<ii>::iterator it;
      it=lower_bound(ra.begin(),ra.end(),ii(rb[i].first,0));
      if(it==ra.end()) it--;
      int x=it-ra.begin();
      while(true){
	if(vis[(*it).second]==0 or it==ra.end()) break;
	it++;
      }
      if(it!=ra.end()){
	vis[i]=1;
	vis[(*it).second]=1;
	res+=abs(rb[i].first-(*it).first);
      }
      else{
	vis[i]=1;
	res+=abs(rb[i].first-ra[x].first);
      }
    }
  }
  return res;
}

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:9:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 |   for(int i=0;i<r.size();i++){
      |               ~^~~~~~~~~
wiring.cpp:12:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |   for(int i=0;i<b.size();i++){
      |               ~^~~~~~~~~
wiring.cpp:18:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   for(int i=0;i<rb.size();i++){
      |               ~^~~~~~~~~~
wiring.cpp:30:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |   for(int i=0;i<rb.size();i++){
      |               ~^~~~~~~~~~
#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...