Submission #128012

#TimeUsernameProblemLanguageResultExecution timeMemory
128012SortingBoxes with souvenirs (IOI15_boxes)C++14
100 / 100
1084 ms254280 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e7 + 7; const long long inf = 1e18 + 7; vector<long long> v1, v2, v3, v4, pr1, pr2; void output(vector<long long> v){ for(long long &x: v){ cout << x << " "; } cout << endl; } long long delivery(int n, int k, int l, int *positions){ sort(positions, positions + n); int idx = 0; for(; idx < n && positions[idx] <= l / 2; idx++){ v1.push_back(positions[idx]); } for(; idx < n; idx++){ v2.push_back(l - positions[idx]); } if(!v2.empty()){ reverse(v2.begin(), v2.end()); } for(int i = 0 ; i < (int)v1.size(); i++){ if(i >= k){ pr1.push_back(pr1[i - k] + v1[i] * 2ll); } else{ pr1.push_back(v1[i] * 2ll); } } for(int i = 0 ; i < (int)v2.size(); i++){ if(i >= k){ pr2.push_back(pr2[i - k] + v2[i] * 2ll); } else{ pr2.push_back(v2[i] * 2ll); } } long long ans = 0, sum1 = 0, sum2 = 0; for(int i = -1; true;){ if(i + k >= (int)v1.size()){ for(++i; i < (int)v1.size(); ++i){ v3.push_back(v1[i]); } break; } i += k; sum1 += (long long)v1[i] * 2ll; } for(int i = -1; true;){ if(i + k >= (int)v2.size()){ for(++i; i < (int)v2.size(); ++i){ v4.push_back(v2[i]); } break; } i += k; sum2 += (long long)v2[i] * 2ll; } ans = sum1 + sum2; if(v3.empty() || v4.empty()){ ans = 0; if(!v1.empty()){ ans += pr1.back(); } if(!v2.empty()){ ans += pr2.back(); } return ans; } ans = pr1.back() + pr2.back(); for(int i = v1.size() - 2; i >= -1 && i >= (int)v1.size() - k; i--){ int j = v2.size() + v1.size() - k - i - 2; //cout << i << " " << j << endl; long long curr = l; if(j > -1){ curr += pr2[j]; } if(i > -1){ curr += pr1[i]; } //cout << curr << endl; ans = min(ans, curr); } return ans; } /*int positions[N], n, k, l; int main(){ cin >> n >> k >> l; for(int i = 0; i < n; i++){ cin >> positions[i]; } cout << delivery(n, k, l, positions) << "\n"; return 0; }*/ /* 3 2 8 1 2 5 */ /* 4 3 20 1 2 3 4 */

Compilation message (stderr)

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:91:24: warning: conversion to 'int' from 'std::vector<long long int>::size_type {aka long unsigned int}' may alter its value [-Wconversion]
  for(int i = v1.size() - 2; i >= -1 && i >= (int)v1.size() - k; i--){
              ~~~~~~~~~~^~~
boxes.cpp:92:41: warning: conversion to 'int' from 'std::vector<long long int>::size_type {aka long unsigned int}' may alter its value [-Wconversion]
   int j = v2.size() + v1.size() - k - i - 2;
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
#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...