# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
637318 | boris_mihov | Wiring (IOI17_wiring) | C++17 | 49 ms | 8488 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "wiring.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
#include <set>
typedef long long llong;
const int MAXN = 100000 + 10;
std::set <int> s;
long long min_total_length(std::vector <int> r, std::vector <int> b)
{
std::sort(r.begin(), r.end());
std::sort(b.begin(), b.end());
if (r.size() > b.size()) std::swap(r, b);
for (const int &i : b)
{
s.insert(i);
}
llong ans = 0;
for (const int &i : r)
{
auto it = s.upper_bound(i);
auto left = it; left--;
if (it == s.end())
{
ans += abs(*left - i);
s.erase(left);
} else if (left == s.end())
{
ans += abs(*it - i);
s.erase(it);
} else
{
if (abs(*left - i) <= abs(*it - i))
{
ans += abs(*left - i);
s.erase(left);
} else
{
ans += abs(*it - i);
s.erase(it);
}
}
}
int ptr = 0;
for (const int &i : s)
{
while (ptr + 1 != r.size() && r[ptr + 1] <= i) ptr++;
int currMin = abs(i - r[ptr]);
if (ptr + 1 != r.size()) currMin = std::min(currMin, abs(r[ptr + 1] - i));
ans += currMin;
}
return ans;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |