Submission #398126

#TimeUsernameProblemLanguageResultExecution timeMemory
398126MeGustaElArroz23Boxes with souvenirs (IOI15_boxes)C++14
100 / 100
1103 ms449528 KiB

#include "boxes.h"
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<ll> vi;

void debug(vi v){
    for (int x:v) cerr << x << ' ';
    cerr << '\n';
}

ll delivery(int n,int k, int l, int sections[]){
    if (l==1) return 0;
    vi v(n);
    for (ll i=0;i<n;i++) v[i]=sections[i];
    v.push_back(0);
    v.push_back(l);
    sort(v.begin(),v.end());
    vi avances(k,0);
    vi sol(n+2,0);
    sol[0]=0; 
    vi trusol(n+2,0);
    for (ll i=1;i<n+2;i++){
        if(v[i]<=l/2){
            avances[i%k]+=v[i]-v[i-1];
            sol[i]=sol[i-1]+avances[i%k];
            trusol[i]=2*sol[i];
        }
        else{
            if (i<=k) sol[i]=l;
            
            else sol[i]=trusol[i-k]+l;
            trusol[i]=sol[i];
        }
    }
    for (ll i=0;i<n+2;i++) v[i]=l-v[i];
    avances=vi(k,0);
    vi sol2(n+2,0);
    ll res=1e18;
    sol2[n+1]=0;
    vi trusol2(n+2,0);
    for (ll i=n;i>=0;i--){
        if(v[i]<=l/2){
            avances[i%k]+=v[i]-v[i+1];
            sol2[i]=sol2[i+1]+avances[i%k];
            trusol2[i]+=2*sol2[i];
        }
        else{
            if (i+k>n) sol2[i]=l;
            else sol2[i]=trusol2[i+k]+l;
            trusol2[i]+=sol2[i];
        }
    }
    trusol[0]=0;
    trusol2[n+1];
    for (ll i=0;i<n+1;i++) res=min(res,trusol[i]+trusol2[i+1]);
    


    return res;
}

Compilation message (stderr)

boxes.cpp: In function 'void debug(vi)':
boxes.cpp:10:16: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   10 |     for (int x:v) cerr << x << ' ';
      |                ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...