Pagini recente » Cod sursa (job #2265905) | Cod sursa (job #180756) | Cod sursa (job #655407) | Cod sursa (job #2853453) | Cod sursa (job #586123)
Cod sursa(job #586123)
#include <fstream>
#include <set>
using namespace std;
const char iname[] = "fabrica.in";
const char oname[] = "fabrica.out";
const int maxn = 100005;
ifstream f(iname);
ofstream g(oname);
unsigned int a[maxn], b[maxn], ta[maxn], timp[maxn];
unsigned int start[maxn], finish[maxn];
int main() {
int N, M, K;
f >> N >> M >> K;
for (int i = 1; i <= M; ++i)
f >> a[i], ta[i] = 0;
for (int i = 1; i <= K; ++i)
f >> b[i];
//Terminam cu turnarea
set< pair<int, int> > S;
for (int i = 1; i <= M; ++i)
S.insert(make_pair(a[i], i));
for (int i = 1; i <= N; ++i) {
int v = S.begin() -> second;
timp[i] = S.begin() -> first;
S.erase(S.begin());
ta[v] += a[v];
S.insert(make_pair(ta[v] + a[v], v));
}
g << timp[N] << " ";
int step = (1 << 30);
int i;
for (i = 0; step; step >>= 1) {
i += step;
S.clear();
for (int j = 1; j <= K; ++j)
S.insert(make_pair(i - b[j], j));
int j;
for (j = N; j > 0; --j) {
int x = S.rbegin() -> first;
if (x < timp[j])
break;
int y = S.rbegin() -> second;
S.erase(*S.rbegin());
x -= b[y];
S.insert(make_pair(x, y));
}
fprintf(stderr, "%d -> %d\n", i, j);
if (j == 0)
i -= step;
}
g << i + 1 << "\n";
}