#include <iostream>
using namespace std;
#define Int long long int
#define MAX_SIZE 200000
#define MAX_OVEN_DP 1000000
#define DEBUG(x)
int main() {
ios::sync_with_stdio(false);
DEBUG(cout << "Podaj liczbe klientow: ");
int nb_clients;
cin >> nb_clients;
DEBUG(cout << "Podaj liczbe piekarnikow: ";)
int nb_ovens;
cin >> nb_ovens;
DEBUG(cout << "Podaj czasy:\n";)
Int delta_time[MAX_SIZE];
Int val;
Int val_last;
cin >> val_last;
delta_time[0] = val_last;
for (auto i = 1; i < nb_clients; ++i) {
cin >> val;
delta_time[i] = val - val_last;
val_last = val;
}
DEBUG(for (auto i = 0; i < nb_clients; ++i)
cout << delta_time[i] << "\n";)
auto *oven_dp = new Int[MAX_OVEN_DP + 1];
for (auto i = 0; i <= MAX_OVEN_DP; ++i) {
oven_dp[i] = -10;
}
Int wait_time;
Int oven_time;
Int delta;
for (auto i = 0; i < nb_ovens; ++i) {
wait_time = 0;
DEBUG(cout << "Podaj szybkosc piekarnika: ";)
cin >> oven_time;
if (oven_dp[oven_time] != -10) {
cout << oven_dp[oven_time] << endl;
continue;
}
delta = oven_time - delta_time[0];
if (delta > 0) {
wait_time += delta;
} else {
delta = 0;
}
for (auto j = 1; j < nb_clients; ++j) {
delta = oven_time - (delta_time[j] - delta);
if (delta > 0) {
wait_time += delta;
} else {
delta = 0;
}
}
cout << wait_time << endl;
oven_dp[oven_time] = wait_time;
}
delete[] oven_dp;
return 0;
}
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <iostream> using namespace std; #define Int long long int #define MAX_SIZE 200000 #define MAX_OVEN_DP 1000000 #define DEBUG(x) int main() { ios::sync_with_stdio(false); DEBUG(cout << "Podaj liczbe klientow: "); int nb_clients; cin >> nb_clients; DEBUG(cout << "Podaj liczbe piekarnikow: ";) int nb_ovens; cin >> nb_ovens; DEBUG(cout << "Podaj czasy:\n";) Int delta_time[MAX_SIZE]; Int val; Int val_last; cin >> val_last; delta_time[0] = val_last; for (auto i = 1; i < nb_clients; ++i) { cin >> val; delta_time[i] = val - val_last; val_last = val; } DEBUG(for (auto i = 0; i < nb_clients; ++i) cout << delta_time[i] << "\n";) auto *oven_dp = new Int[MAX_OVEN_DP + 1]; for (auto i = 0; i <= MAX_OVEN_DP; ++i) { oven_dp[i] = -10; } Int wait_time; Int oven_time; Int delta; for (auto i = 0; i < nb_ovens; ++i) { wait_time = 0; DEBUG(cout << "Podaj szybkosc piekarnika: ";) cin >> oven_time; if (oven_dp[oven_time] != -10) { cout << oven_dp[oven_time] << endl; continue; } delta = oven_time - delta_time[0]; if (delta > 0) { wait_time += delta; } else { delta = 0; } for (auto j = 1; j < nb_clients; ++j) { delta = oven_time - (delta_time[j] - delta); if (delta > 0) { wait_time += delta; } else { delta = 0; } } cout << wait_time << endl; oven_dp[oven_time] = wait_time; } delete[] oven_dp; return 0; } |
English