Submission #1265639

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

using ll = long long;

using namespace std;

const ll INF = 1e18;

ll dist(ll i, ll j, int L){

  if(i > j) swap(i, j);
  return min(j - i, L - (j - i));

}

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

  vector<ll> p(2 * n);

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

  for(int i=n; i<(2 * n); i++) p[i] = p[i - n];

  vector<ll> cost(2 * n, 0);

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

    int nxt = min(2 * n - 1, i + K - 1);
  
    cost[i] = dist(0, p[i], L) + dist(p[i], p[nxt], L) + dist(p[nxt], 0, L);

  }

  vector<ll> sum(2 * n + 1, 0);

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

    int nxt = min(2 * n - 1, i + K - 1);

    sum[i] = sum[nxt + 1] + cost[i];

  }

  ll ans = INF;

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

    int r = n % K;

    ll cur_ans = sum[i] - sum[i + n - r];

    cur_ans += dist(0, p[i + n - r], L) + dist(p[i + n - r], p[i + (n - 1)], L) + dist(p[i + (n - 1)], 0, L);

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