제출 #228627

#제출 시각아이디문제언어결과실행 시간메모리
228627cfalas선물상자 (IOI15_boxes)C++14
100 / 100
871 ms294032 KiB
#include<bits/stdc++.h>
using namespace std;
#include "boxes.h"
#define ll long long

long long delivery(int N, int K, int L, int p[]) {
	sort(p, p+N);
	if(K==1){
		ll ans=0;
		for(int i=0;i<N;i++){
			ans+=2*min(p[i],L-p[i]); 
		}
		return ans;
	}
	ll minCW[N+1] = {};
	ll minCCW[N+1] = {};
	//int cntCW[N+1] = {};
	minCW[1] = 2*p[0];
	for(int i=2;i<=N;i++){
		if(i>K) minCW[i] = minCW[i-K] + 2*p[i-1];
		else minCW[i] = minCW[i-1] + 2*(p[i-1]-p[i-2]);
		//cout<<minCW[i]<<" ";
	}
	//cout<<endl;
	minCCW[1] = 2*(L-p[N-1]);
	for(int i=2;i<=N;i++){
		if(i>K) minCCW[i] = minCCW[i-K] + 2*(L-p[N - i]);
		else minCCW[i] = minCCW[i-1] + 2*(-p[N-i]+p[N-i+1]);
		//cout<<minCCW[i]<<" ";
	}
	ll mina = (N+K-1)/K * (ll)L;
	//cout<<endl;
	//cout<<mina<<endl;
	for(int i=0;i<=N;i++){
		//cout<<i<<" "<<minCW[i] + minCCW[N-i]<<endl;
		mina = min(mina, minCW[i] + minCCW[N-i]);
		if(i+K<=N){
			//cout<<"a "<<minCW[i] + L + minCCW[N-K-i]<<endl;
			mina = min(mina, minCW[i] + L + minCCW[N-K-i]);
		}
	}
	//cout<<endl;
	//cout<<mina<<endl;
	return mina;
}
#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...