Submission #1028473

#TimeUsernameProblemLanguageResultExecution timeMemory
1028473pccBoxes with souvenirs (IOI15_boxes)C++17
100 / 100
457 ms255148 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
vector<int> lv,rv;
vector<ll> ldp,rdp;

vector<ll> get_dp(vector<int>& v,int K){
	vector<ll> re(v.size(),0);
	for(int i = 0;i<v.size();i++){
		if(i<K)re[i] = v[i]*2;
		else re[i] = v[i]*2+re[i-K];
	}
	return re;
}

long long delivery(int N, int K, int L, int P[]) {
	for(int i = 0;i<N;i++){
		if(P[i]*2<=L)lv.push_back(P[i]);
		else rv.push_back(L-P[i]);
	}
	reverse(rv.begin(),rv.end());
	ldp = get_dp(lv,K);rdp = get_dp(rv,K);
	for(auto &i:rv)i = L-i;
	if(lv.empty())return rdp.back();
	else if(rv.empty())return ldp.back();
	int pt = 0;
	ll ans = ldp.back()+rdp.back();
	for(int i = rv.size()-1;i>=0;i--){
		while(pt<lv.size()&&(int)lv.size()-pt+(int)rv.size()-i>K)pt++;
		if(pt == lv.size())break;
		ll tans = (pt?ldp[pt-1]:0ll)+(i?rdp[i-1]:0ll)+L;
		ans = min(tans,ans);
	}
	return ans;
}

Compilation message (stderr)

boxes.cpp: In function 'std::vector<long long int> get_dp(std::vector<int>&, int)':
boxes.cpp:11:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |  for(int i = 0;i<v.size();i++){
      |                ~^~~~~~~~~
boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:30:23: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   30 |  for(int i = rv.size()-1;i>=0;i--){
      |              ~~~~~~~~~^~
boxes.cpp:31:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |   while(pt<lv.size()&&(int)lv.size()-pt+(int)rv.size()-i>K)pt++;
      |         ~~^~~~~~~~~~
boxes.cpp:32:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |   if(pt == lv.size())break;
      |      ~~~^~~~~~~~~~~~
#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...