Submission #235764

#TimeUsernameProblemLanguageResultExecution timeMemory
235764MarcoMeijerWiring (IOI17_wiring)C++14
0 / 100
5 ms512 KiB
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;

//macros
typedef long long ll;
typedef pair<int, int> ii;
typedef tuple<int, int, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<ll> vll;
#define REP(a,b,c) for(int a=int(b); a<int(c); a++)
#define RE(a,c) REP(a,0,c)
#define RE1(a,c) REP(a,1,c+1)
#define REI(a,b,c) REP(a,b,c+1)
#define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--)
#define INF 1e9
#define pb push_back
#define fi first
#define se second
#define sz size()
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());


//===================//
//   begin program   //
//===================//

const int MX = 5e5;


long long min_total_length(std::vector<int> r, std::vector<int> b) {
    ll ans = 0;
    priority_queue<ii, vii, greater<ii>> pq;
    for(int i:r) pq.push({i, 0});
    for(int i:b) pq.push({i, 1});
    int lastR = -1;
    int lastB = -1;
    queue<int> R, B;
    while(!pq.empty()) {
        ii p = pq.top(); pq.pop();
        if(p.se) {
            lastB = p.fi;
            if(R.empty()) {
                B.push(p.fi);
            } else {
                ans += abs(R.front()-p.fi);
                R.pop();
            }
        } else {
            lastR = p.fi;
            if(B.empty()) {
                R.push(p.fi);
            } else {
                ans += abs(B.front()-p.fi);
                B.pop();
            }
        }
    }
    while(!R.empty()) {
        ans += abs(lastB - R.front());
        R.pop();
    }
    while(!B.empty()) {
        ans += abs(lastR - B.front());
        B.pop();
    }
	return ans;
}
#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...