제출 #777458

#제출 시각아이디문제언어결과실행 시간메모리
777458boris_mihov선물상자 (IOI15_boxes)C++17
20 / 100
1 ms276 KiB
#include "boxes.h" #include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 10000000 + 10; const int INF = 1e9; int n, k, l; std::vector <int> left; std::vector <int> right; llong delivery(int N, int K, int L, int p[]) { n = N; k = K; l = L; for (int i = 0 ; i < n ; ++i) { if (p[i] <= l - p[i]) left.push_back(p[i]); else right.push_back(p[i]); } int carrying = 0; llong ans = 0; bool shouldAdd = false; std::reverse(right.begin(), right.end()); for (int i = 0 ; i < left.size() ; i += k) { if (i + k - 1 < left.size()) { ans += 2 * left[i + k - 1]; } else { shouldAdd = true; ans += left.back(); carrying = k - (left.size() - i); } } llong ans1 = ans; std::vector <int> rightCpy = right; for (int i = 0 ; i < carrying && rightCpy.size() ; ++i) { rightCpy.pop_back(); } if (shouldAdd) ans1 += l - left.back(); for (int i = 0 ; i < rightCpy.size() ; i += k) { if (i + k - 1 < rightCpy.size()) { ans1 += 2 * (l - rightCpy[i + k - 1]); } else { ans1 += 2 * (l - rightCpy.back()); } } if (shouldAdd) ans += left.back(); for (int i = 0 ; i < right.size() ; i += k) { if (i + k - 1 < right.size()) { ans += 2 * (l - right[i + k - 1]); } else { ans += 2 * (l - right.back()); } } return std::min(ans, ans1); }

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

boxes.cpp: In function 'llong delivery(int, int, int, int*)':
boxes.cpp:33:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |     for (int i = 0 ; i < left.size() ; i += k)
      |                      ~~^~~~~~~~~~~~~
boxes.cpp:35:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         if (i + k - 1 < left.size())
      |             ~~~~~~~~~~^~~~~~~~~~~~~
boxes.cpp:42:26: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   42 |             carrying = k - (left.size() - i);
      |                        ~~^~~~~~~~~~~~~~~~~~~
boxes.cpp:54:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for (int i = 0 ; i < rightCpy.size() ; i += k)
      |                      ~~^~~~~~~~~~~~~~~~~
boxes.cpp:56:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         if (i + k - 1 < rightCpy.size())
      |             ~~~~~~~~~~^~~~~~~~~~~~~~~~~
boxes.cpp:66:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for (int i = 0 ; i < right.size() ; i += k)
      |                      ~~^~~~~~~~~~~~~~
boxes.cpp:68:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         if (i + k - 1 < right.size())
      |             ~~~~~~~~~~^~~~~~~~~~~~~~
#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...