Submission #23828

# Submission time Handle Problem Language Result Execution time Memory
23828 2017-05-26T12:16:48 Z Nirjhor Boxes with souvenirs (IOI15_boxes) C++14
25 / 100
3 ms 376 KB
#include <bits/stdc++.h>
#include "boxes.h"

using namespace std;

int n, k, l;

long long solveLeft (long long lim, int p[]) {
	int takenLeft = 0;
	long long len = 0;
  for (long long i = lim - 1; i >= 0; --i) {
  	if (takenLeft == 0) {
  		len += 2LL * p[i];
  	}
  	++takenLeft;
  	if (takenLeft == k) {
  		takenLeft = 0;
  	}
  }
  return len;
}

long long solveRight (long long lim, int p[]) {
	long long len = 0;
  int takenRight = 0;
  for (long long i = lim; i < n; ++i) {
  	if (takenRight == 0) {
  		len += 2LL * (l - p[i]);
  	}
  	++takenRight;
  	if (takenRight == k) {
  		takenRight = 0;
  	}
  }
  return len;
}

// #define debug(x) cout << #x << " = " << x << endl

long long delivery (int N, int K, int L, int p[]) {
  int mid = L >> 1;
  // debug(mid);
  long long half = lower_bound(p, p + N, mid) - p;
  // debug(half);
  n = N, k = K, l = L;
  long long ret = solveLeft(half, p) + solveRight(half, p);
  // debug(ret);
  int taken = 0;
  long long left = half - 1, right = half;
  // debug(left); debug(right);
  while (taken < K and (left >= 0 or right < n)) {
  	if (left >= 0 and right < n) {
  		if (L < p[left] + p[right]) {
  			--left;
  			++taken;
  		} else {
  			++right;
  			++taken;
  		}
  	} else if (left >= 0) {
  		--left;
  		++taken;
  	} else {
  		++right;
  		++taken;
  	}
  }
  // debug(left); debug(right);
  ret = min(ret, L + solveLeft(left + 1, p) + solveRight(right, p));
  return ret;
}

# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 3 ms 256 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Incorrect 2 ms 256 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 256 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 3 ms 256 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Incorrect 2 ms 256 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 3 ms 256 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Incorrect 2 ms 256 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 3 ms 256 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Incorrect 2 ms 256 KB Output isn't correct
5 Halted 0 ms 0 KB -