Submission #1246662

#TimeUsernameProblemLanguageResultExecution timeMemory
1246662santi3223Boxes with souvenirs (IOI15_boxes)C++20
50 / 100
2092 ms8528 KiB
#include <bits/stdc++.h>
#include "boxes.h"
using namespace std;
#define ll long long
#define vb vector<bool>
#define pb push_back
#define ff(aa, bb, cc) for(int aa = bb; aa < cc; aa++)
#define vl vector<ll>
#define pll pair<ll, ll>
#define fi first
#define se second
#define ed "\n"
#define all(aaa) aaa.begin(), aaa.end()
#define rall(aaa) aaa.rbegin(), aaa.rend()
ll MOD = 1e9+7;


long long delivery(int n, int k, int l, int p[]){
	vector<int> arr;
	bool ok = false;
	ff(i, 0, n){
		arr.pb(p[i]);
		if(p[i] == l/2){
			ok = true;
		}
	}
	ll minn = LLONG_MAX;
	if(l % 2 == 0 && ok){
		//cout << "CASO 1" << ed;
		ll le = lower_bound(all(arr), l/2) - arr.begin();
		ll ri = upper_bound(all(arr), l/2) - arr.begin();
		ll st = max(le-k+1, 0LL);
		ll curst = st, curend = st+k-1;
		//cout << "LE " << le << "  RI " << ri << "   CURST"  << curst << ed; 
		while(curst <= ri && curend <= n){
			//cout << curst << "  ->  " << curend << ed;
			ll cur = l;
			ll s = 0;
			for(ll i = curst-1; i >= 0; i -= k){
				s += arr[i]*2;
				cur += arr[i]*2;
			}
			//cout << "SUM izq " << s << ed;
			s = 0;
			for(ll i = curend+1; i < n; i += k){
				//cout << (l-arr[i])*2 << "  ";
				s += ((l-arr[i])*2);
				cur += (l-arr[i])*2;
			}
			//cout << ed;
			//cout << "SUM der " << s << ed;
			//cout << "FIN " << cur << ed << ed;
			minn = min(minn, cur);
			curst++;
			curend++;
		}
	}
	else{
		//cout << "CASO 2" << ed;
		ll ri = lower_bound(all(arr), l/2) - arr.begin();
		ll curst = max(ri-k+1, 0LL), curend = curst+k-1;
		//cout << curst << " " << ri << "  " << curend << " " << n << ed;
		while(curst <= ri && curend <= n){
			//cout << curst << "  ->  " << curend << ed;
			ll cur = l;
			ll s = 0;
			for(ll i = curst-1; i >= 0; i -= k){
				s += arr[i]*2;
				cur += arr[i]*2;
			}
			//cout << "SUM izq " << s << ed;
			s = 0;
			for(ll i = curend+1; i < n; i += k){
				//cout << (l-arr[i])*2 << "  ";
				s += ((l-arr[i])*2);
				cur += (l-arr[i])*2;
			}
			//cout << ed;
			//cout << "SUM der " << s << ed;
			//cout << "FIN " << cur << ed << ed;
			minn = min(minn, cur);
			curst++;
			curend++;
		}
	}
	ll id = -1;
	//cout << "NO CIRCLE" << ed;
	while(id < n){
		//cout << "ID " << id << ed;
		ll cur = 0;
		ll s = 0;
		for(ll i = id; i >= 0; i -= k){
			//cout << arr[i]*2 << " ";
			s += arr[i]*2;
			cur += arr[i]*2;
		}
		//cout << ed;
		//cout << "SUM izq " << s << ed;
		s = 0;
		for(ll i = id+1; i < n; i += k){
			//cout << (l-arr[i])*2 << "  ";
			s += (l-arr[i])*2;
			cur += (l-arr[i])*2;
		}
		//cout << ed;
		//cout << "SUM der " << s << ed;
		//cout << "FIN " << cur << ed << ed;
		minn = min(minn, cur);
		id++;
	}
	return minn;
}
/*

int main() {
	int N, K, L;
	cin >> N >> K >> L;
	int p[N];
	ff(i, 0, N){
		cin >> p[i];
	}
	long long ans = delivery(N, K, L, p);
	cout << ans << ed;
    return 0;
}
*/
#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...