이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
const int maxn = 2e5 + 20;
ll dp[maxn];
vector<int> t[2];
long long min_total_length(std::vector<int> r, std::vector<int> b)
{
int n = r.size() + b.size();
vector<pair<int , int> > a;
for(auto x : r)
a.pb({x , 0});
for(auto x : b)
a.pb({x , 1});
a.pb({-1e9 , -1});
sort(a.begin() , a.end());
memset(dp , 63 , sizeof dp);
dp[0] = 0;
for(int i = 1; i <= n; i++)
{
t[0].clear() , t[1].clear();
for(int j = i - 1; j >= 0; j--)
{
t[a[j + 1].second].pb(a[j + 1].first);
int shit = min(t[0].size() , t[1].size());
if(shit == 1)
{
int ind = -1;
if((int)t[0].size() == 1)
ind = 0;
else
ind = 1;
ll tmp = 0;
for(auto x : t[ind ^ 1])
tmp += abs(t[ind][0] - x);
dp[i] = min(dp[i] , dp[j] + tmp);
}
if(t[0].size() == t[1].size())
{
ll tmp = 0;
for(int j = 0; j < (int)t[0].size(); j++)
tmp += abs(t[0][j] - t[1][j]);
dp[i] = min(dp[i] , dp[j] + tmp);
}
}
}
return dp[n];
}
# | 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... |