Submission #777442

#TimeUsernameProblemLanguageResultExecution timeMemory
777442boris_mihovBoxes with souvenirs (IOI15_boxes)C++17
0 / 100
0 ms212 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; std::reverse(right.begin(), right.end()); for (int i = 0 ; i < left.size() ; ++i) { if (i + k - 1 < left.size()) { ans += 2 * left[i + k - 1]; } else { 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(); } ans1 += l - left.back(); for (int i = 0 ; i < rightCpy.size() ; ++i) { if (i + k - 1 < rightCpy.size()) { ans1 += 2 * (l - rightCpy[i + k - 1]); } else { ans1 += 2 * (l - rightCpy.back()); } } ans += left.back(); for (int i = 0 ; i < right.size() ; ++i) { if (i + k - 1 < right.size()) { ans += 2 * (l - right[i + k - 1]); } else { ans += 2 * (l - right.back()); } } return std::min(ans, ans1); }

Compilation message (stderr)

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