Submission #1265709

#TimeUsernameProblemLanguageResultExecution timeMemory
1265709julia_08Boxes with souvenirs (IOI15_boxes)C++20
20 / 100
0 ms328 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_[]){

  ll L = L_;

  vector<ll> p(n);

  for(int i=0; i<n; i++) p[i] = p_[i];

  vector<ll> cost(n, 0);

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

    int j = max(0, i - K + 1);
  
    cost[i] = min({L, 2 * p[i], 2 * (L - p[j])});

    // cout << i << " -> " << cost[i] << endl;

  }

  vector<ll> sum(n, 0);

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

    int j = max(0, i - K + 1);

    sum[i] = (j == 0 ? 0 : sum[j - 1]) + cost[i];

  }

  ll ans = INF;

  for(int i=0; i<(K - 1); i++){

    // brutando o que passa pelo 0

    int j = n - K + i + 1;

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

    int r = (j - i - 1) % K;

    cur_ans += sum[j - 1] - sum[i + r];

    // cost do [i + 1, i + r]
    if(r > 0) cur_ans += min({L, 2 * p[i + r], 2 * (L - p[i + 1])});

    // cout << i << " " << j << " -> " << cur_ans << endl;


    ans = min(ans, cur_ans);

  }

  ans = min(ans, sum[n - 1]);

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