Submission #425378

#TimeUsernameProblemLanguageResultExecution timeMemory
425378dreezyBoxes with souvenirs (IOI15_boxes)C++17
0 / 100
8 ms288 KiB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long

long long delivery(int N, int K, int L, int p[]) {
	
	//vector<ll> p(N);
	
	//for(int i = 0; i<n; i++) p[i] = pp[i];
	ll ans = 1e18;
	int mid = L/2;
	int midind = N;
	for(int i =0; i<N; i++){
		if(p[i] >= mid){
			midind = i;
			break;
		} 
	}
	
	for(int first = 0; first< N; first++){
		ll curans = 0;
		//cout << first<<":: "<<endl;
		for(int rng = first; rng < N + first; rng += K){
			int start = rng;
			
			int end = start + K -1;
			int mstart = start % N;
			int mend = end % N;
			if(end - N >= first){
				end = first - 1 + N;
				mend = end % N;
			}

			if(end < N){
							
				//cout <<start<<", "<<end<< ": "<< p[start]<<", "<<p[end]<<endl;
				if(end< midind){//if they are alll in first half
					curans += 2 * p[end];
				}
				//all in second half
				else if(start >= midind){
					curans += 2 * ( L - p[start]);
				}
				else{
					curans += max(L, 2*p[midind - 1] + 2 * p[midind]);
				}
			}
			else{
				
				
				if( start < N){
					if(start < midind){
						curans += L;
					}
					else if(mend >= midind){
						curans += L;
					}
					else{
						curans += max(L , 2 * p[mend] + 2 * p[start]);
					}
				}
				else{
					if(mend< midind){//if they are alll in first half
						curans += 2 * p[mend];
					}
					//all in second half
					else if(mstart >= midind){
						curans += 2 * ( L - p[mstart]);
					}
					else{
						curans += max(L, 2*p[midind - 1] + 2 * p[midind]);
					}
					
				}
				
			}
		
			
				// do circle	
				
			//cout << rng<<": "<<curans<<" ";
		}
		//cout <<":: "<<curans<<endl<<endl;
		ans = min(curans, ans);
	}
    return ans;
}
/************/
#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...