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 <vector>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
long long min_total_length(std::vector<int> RR, std::vector<int> BB)
{
vector<pair<ll,ll>> tp;
for(auto i:RR)tp.push_back({i,0});
for(auto i:BB)tp.push_back({i,1});
sort(begin(tp),end(tp));
ll n=tp.size();
ll dp[n+1]={0};
dp[0]=0;
for(int i=1;i<=n;i++)
dp[i]=1e15;
for(int i=1;i<=n;i++)
{
// cout<<"Computing dp for "<<i<<endl;
int j=i-1;
ll sm=0;
ll len=0;
ll last=0;
while(j>=0 and tp[j].second==tp[i-1].second)
{
len++;
sm+=tp[j].first;
last=tp[j].first;
j--;
}
// cout<<"Reach "<<j<<' '<<sm<<' '<<last<<endl;
int l=j;
ll sm1=0,len1=0;
while(j>=0 and tp[j].second==tp[l].second)
{
sm1+=tp[j].first;
len1++;
ll cur=dp[j] + (sm-(len*tp[l].first)) + ((len1*last)-sm1) - last + tp[l].first;
// cout<<"Hola dp updating using "<<j<<' '<<sm<<' '<<len<<' '<<sm1<<' '<<len1<<endl;
// cout<<"Value "<<last<<' '<<cur<<endl;
dp[i]=min(dp[i],cur);
j--;
}
}
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... |