제출 #771311

#제출 시각아이디문제언어결과실행 시간메모리
771311caganyanmaz선물상자 (IOI15_boxes)C++17
25 / 100
1 ms340 KiB
#include <bits/stdc++.h>
#define pb push_back
#define DEBUGGING
#define f first
#define s second
#define int int64_t
#ifdef DEBUGGING
#define debug(x) cout << (#x) << ": " << (x) << "\n";
#else
#define debug(x) 42
#endif
using namespace std;
 
constexpr static int MXSIZE = 1e7 + 2;
int left_dp[MXSIZE];
int right_dp[MXSIZE];
vector<int> left_val;
vector<int> right_val;
int mid = 0;
 
int delivery(int32_t N, int32_t K, int32_t L, int32_t p[])
{
	for (int i = 0; i < N; i++)
		if (p[i] < (L / 2))
			left_val.pb(p[i]);
		else if (p[i] > (L / 2))
			right_val.pb(p[i]);
		else
			mid++;
    reverse(right_val.begin(), right_val.end());
	for (int i = 1; i <= left_val.size(); i++)
	{
		if (i - K >= 0)
			left_dp[i] = left_dp[i-K];
		left_dp[i] += left_val[i-1] * 2; 
	}
	for (int i = 1; i <= right_val.size(); i++)
	{
		if (i - K >= 0)
			right_dp[i] = right_dp[i-K];
		right_dp[i] += (L - right_val[i-1]) * 2;
	}
	int res = left_dp[left_val.size()] + right_dp[right_val.size()] + (mid/K) * L;
	if (mid%K)
		res += L;
	for (int j = 1; j <= 20; j++)
	{
		int lo = K * j - (mid % K);
		for (int i = 0; i <= lo; i++)
        		if (left_val.size() >= i && right_val.size() >= lo-i)
						res = min(res, left_dp[left_val.size()-i] + right_dp[right_val.size()-lo+i] + ((mid+lo)/K) * L);
	}
	return res;
}

컴파일 시 표준 에러 (stderr) 메시지

boxes.cpp: In function 'int64_t delivery(int32_t, int32_t, int32_t, int32_t*)':
boxes.cpp:31:20: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |  for (int i = 1; i <= left_val.size(); i++)
      |                  ~~^~~~~~~~~~~~~~~~~~
boxes.cpp:37:20: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |  for (int i = 1; i <= right_val.size(); i++)
      |                  ~~^~~~~~~~~~~~~~~~~~~
boxes.cpp:50:31: warning: comparison of integer expressions of different signedness: 'std::vector<long int>::size_type' {aka 'long unsigned int'} and 'int64_t' {aka 'long int'} [-Wsign-compare]
   50 |           if (left_val.size() >= i && right_val.size() >= lo-i)
      |               ~~~~~~~~~~~~~~~~^~~~
boxes.cpp:50:56: warning: comparison of integer expressions of different signedness: 'std::vector<long int>::size_type' {aka 'long unsigned int'} and 'int64_t' {aka 'long int'} [-Wsign-compare]
   50 |           if (left_val.size() >= i && right_val.size() >= lo-i)
      |                                       ~~~~~~~~~~~~~~~~~^~~~~~~
#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...