답안 #23835

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
23835 2017-05-26T13:02:02 Z Nirjhor 선물상자 (IOI15_boxes) C++14
35 / 100
2 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;
}

pair <long long, long long> fullTrip (long long lim, int p[]) {
	int taken = 0;
  long long left = lim - 1, right = lim;
  // 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;
  	}
  }
  return make_pair(left, right);
}

#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;
  long long other = upper_bound(p, p + N, mid) - p;
  // debug(half); debug(other);
  n = N, k = K, l = L;
  // cout << solveLeft(half, p) << " " << solveRight(half, p) << endl;
  long long ret = solveLeft(half, p) + solveRight(half, p);
  ret = min(ret, solveLeft(other, p) + solveRight(other, p));
  // debug(ret);
  // debug(left); debug(right);
  pair <long long, long long> f1 = fullTrip(half, p);
  pair <long long, long long> f2 = fullTrip(other, p);
  ret = min(ret, L + solveLeft(f1.first + 1, p) + solveRight(f1.second, p));
  ret = min(ret, L + solveLeft(f2.first + 1, p) + solveRight(f2.second, p));
  return ret;
}

# 결과 실행 시간 메모리 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
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 252 KB Output is correct
3 Correct 2 ms 292 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 252 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 292 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 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
9 Correct 2 ms 252 KB Output is correct
10 Correct 2 ms 292 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 252 KB Output is correct
13 Correct 2 ms 256 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 292 KB Output is correct
17 Correct 2 ms 376 KB Output is correct
18 Correct 2 ms 256 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 376 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
22 Correct 2 ms 256 KB Output is correct
23 Correct 2 ms 256 KB Output is correct
24 Correct 2 ms 348 KB Output is correct
25 Correct 2 ms 256 KB Output is correct
26 Correct 2 ms 256 KB Output is correct
27 Incorrect 2 ms 376 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 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
9 Correct 2 ms 252 KB Output is correct
10 Correct 2 ms 292 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 252 KB Output is correct
13 Correct 2 ms 256 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 292 KB Output is correct
17 Correct 2 ms 376 KB Output is correct
18 Correct 2 ms 256 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 376 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
22 Correct 2 ms 256 KB Output is correct
23 Correct 2 ms 256 KB Output is correct
24 Correct 2 ms 348 KB Output is correct
25 Correct 2 ms 256 KB Output is correct
26 Correct 2 ms 256 KB Output is correct
27 Incorrect 2 ms 376 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 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
9 Correct 2 ms 252 KB Output is correct
10 Correct 2 ms 292 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 252 KB Output is correct
13 Correct 2 ms 256 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 292 KB Output is correct
17 Correct 2 ms 376 KB Output is correct
18 Correct 2 ms 256 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 376 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
22 Correct 2 ms 256 KB Output is correct
23 Correct 2 ms 256 KB Output is correct
24 Correct 2 ms 348 KB Output is correct
25 Correct 2 ms 256 KB Output is correct
26 Correct 2 ms 256 KB Output is correct
27 Incorrect 2 ms 376 KB Output isn't correct
28 Halted 0 ms 0 KB -