Submission #433193

#TimeUsernameProblemLanguageResultExecution timeMemory
433193pliamWiring (IOI17_wiring)C++14
0 / 100
1080 ms8604 KiB
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MAXN 100005
#define MAXM 100005
#define INF (ll)2e18

vector<pair<ll,int>> points;//0=red,1=blue
ll dp[MAXN+MAXM];
ll suff[MAXN],pref,dist;
int pos;
int size_seg;
int m;

ll min_total_length(vector<int> r, vector<int> b) {
    points.push_back({-1,-1});
    for(auto x:r){
        points.push_back({x,0});
    }
    for(auto x:b){
        points.push_back({x,1});
    }
    sort(points.begin(),points.end());
    pos=1;
    m=1;
    dp[0]=0;
    dp[1]=INF;
    while(points[pos].second==points[pos+1].second){
        dp[pos+1]=INF;
        pos++;
        m++;
    }
    pos++;
    m++;
    while(pos<points.size()){
        if(points[pos].second!=points[pos-1].second){
            //new segment
            size_seg=m-1;
            m=1;
            suff[0]=0;
            pref=0;
            for(int i=1;i<=size_seg;i++){
                suff[i]=suff[i-1]+points[pos-1].first-points[pos-i].first;
            }
            dist=points[pos].first-points[pos-1].first;
        }else{
            pref+=points[pos].first-points[pos-m+1].first;
        }
        dp[pos]=INF;
        for(int n=1;n<=size_seg;n++){
            dp[pos]=min(dp[pos],dp[pos-m-n]+pref+suff[n]+max(m,n)*dist);
        }
        m++;
        pos++;
    }
    return dp[points.size()-1];
}

Compilation message (stderr)

wiring.cpp: In function 'll min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:36:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     while(pos<points.size()){
      |           ~~~^~~~~~~~~~~~~~
#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...