Submission #1265718

#TimeUsernameProblemLanguageResultExecution timeMemory
1265718julia_08Boxes with souvenirs (IOI15_boxes)C++20
100 / 100
359 ms213892 KiB
#include <bits/stdc++.h>
#include "boxes.h"

using ll = long long;

using namespace std;

const ll INF = 1e18;

ll delivery(int n, int K, int L, int p[]){

  vector<ll> pref(n + 1, 0), suf(n + 1, 0);

  for(int i=0; i<n; i++){
    
    int j = max(0, i - K + 1);

    if(j > 0) pref[i] = pref[j - 1];

    pref[i] += min({L, 2 * p[i], 2 * (L - p[j])});

  }

  for(int i=(n - 1); i>=0; i--){

    int j = min(n - 1, i + K - 1);

    if(j < n - 1) suf[i] = suf[j + 1];

    suf[i] += min({L, 2 * p[j], 2 * (L - p[i])});

  }

  ll ans = INF;

  // na verdade, o 0 nao importa
  // bruta o que vai ser diferente

  for(int i=0; i<n; i++){

    int j = min(n - 1, i + K - 1);

    ll cur_ans = min({L, 2 * p[j], 2 * (L - p[i])});

    if(i > 0) cur_ans += pref[i - 1];
    if(j < n - 1) cur_ans += suf[j + 1];

    ans = min(ans, cur_ans);

  }

  return ans;

}
#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...