1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <cstdio>
#include <cstdint>
#include <cinttypes>
#include <vector>
#include <algorithm>

int main(int argc, char const *argv[]) {
	uint32_t clients_count;
	scanf("%" PRIu32, &clients_count);

	uint32_t ovens_count;
	scanf("%" PRIu32, &ovens_count);

	std::vector<uint64_t> clients_arrivals;
	clients_arrivals.reserve(clients_count);
	while (clients_count--) {
		uint64_t tmp;
		scanf("%" PRIu64, &tmp);
		clients_arrivals.push_back(tmp);
	}

	std::vector<uint64_t> baking_durations;
	baking_durations.reserve(ovens_count);
	while (ovens_count--) {
		uint64_t tmp;
		scanf("%" PRIu64, &tmp);
		baking_durations.push_back(tmp);
	}

	for (const auto &baking_duration : baking_durations) {
		uint64_t wait_acc_time = 0;
		uint64_t prev_served_time = 0;
		for (const auto &client_arrival : clients_arrivals) {
			auto earliest_possible_serve_time = prev_served_time + baking_duration;
			if (earliest_possible_serve_time > client_arrival) {
				wait_acc_time += earliest_possible_serve_time - client_arrival;
				prev_served_time = earliest_possible_serve_time;
			} else {
				prev_served_time = client_arrival;
			}
		}
		printf("%" PRIu64 "\n", wait_acc_time);
	}

	return 0;
}