제출 #1328043

#제출 시각아이디문제언어결과실행 시간메모리
1328043MateiKing80Nile (IOI24_nile)C++20
67 / 100
2095 ms6556 KiB
#include <bits/stdc++.h>
#include "nile.h"

using namespace std;

using ll = long long;
#define int ll

const int N = 100005;
const ll inf = 1e15;

struct obiect {
	ll w, a, b;
	const bool operator < (const obiect &oth) {
		return w < oth.w;
	}
};

std::vector<long long> calculate_costs(std::vector<signed> w, std::vector<signed> a, std::vector<signed> b, std::vector<signed> e) {
	ll n = w.size();
	vector<obiect> v;
	for (int i = 0; i < n; i ++) {
		v.push_back({w[i], a[i], b[i]});
	}
	sort(v.begin(), v.end());
	
	vector<ll> ans;
	for (auto q : e) {
		int start = 0;
		ans.push_back(0);
		while (start < n) {
			int last = n - 1;
			for (int i = start; i < n - 1; i ++) {
				if (v[i + 1].w - v[i].w > q) {
					last = i;
					break;
				}
			}
			int rasp = 0;
			for (int i = start; i <= last; i ++) {
				rasp += v[i].b;
			}
			if ((last - start + 1) % 2 == 0) {
				ans.back() += rasp;
			} else {
				int mn = inf;
				for (int i = start; i <= last; i += 2) {
					mn = min(mn, v[i].a - v[i].b);
				}
				for (int i = start + 1; i < last; i += 2) {
					if (v[i + 1].w - v[i - 1].w <= q) {
						mn = min(mn, v[i].a - v[i].b);
					}
				}
				ans.back() += rasp + mn;
			}
			start = last + 1;
		}
	}
	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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...