Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #define NJOB 1000
- #define NA 30
- #define NB 30
- #define MAX_TIME 40001
- #define MAX(a, b) ((a)>(b)?(a):(b))
- int njob, na, nb;
- int rate_a[NA] = {0};
- int rate_b[NB] = {0};
- int done_a[NJOB] = {0};
- int done_b[NJOB] = {0};
- int fini_a, fini_b;
- int job(int done_x[], int rate_x[], int size)
- {
- int free_time[MAX(NA, NB)] = {0};
- int _idx_mach = 0;
- int _end_time = 0;
- int lv, lv2;
- for (lv = 0; lv < njob; lv++) {
- _end_time = MAX_TIME;
- _idx_mach = -1;
- for (lv2 = 0; lv2 < size; lv2++) {
- if (_end_time > free_time[lv2] + rate_x[lv2]) {
- _end_time = free_time[lv2] + rate_x[lv2];
- _idx_mach = lv2;
- }
- }
- free_time[_idx_mach] = _end_time;
- done_x[lv] = _end_time;
- }
- return _end_time;
- }
- void init(void)
- {
- FILE *fin;
- int lv;
- fin = fopen("job.in", "r");
- fscanf(fin, "%d %d %d ", &njob, &na, &nb);
- for (lv = 0; lv < na; lv++) {
- fscanf(fin, "%d ", &rate_a[lv]);
- }
- for (lv = 0; lv < nb; lv++) {
- fscanf(fin, "%d ", &rate_b[lv]);
- }
- fclose(fin);
- }
- int main()
- {
- FILE *fout;
- int lv;
- init();
- fini_a = job(done_a, rate_a, na);
- job(done_b, rate_b, nb);
- fini_b = 0;
- for (lv = 0; lv < njob; lv++) {
- if (fini_b < done_a[lv] + done_b[njob-lv-1]) {
- fini_b = done_a[lv] + done_b[njob-lv-1];
- }
- }
- fout = fopen("job.out", "w");
- fprintf(fout, "%d %d\n", fini_a, fini_b);
- fclose(fout);
- return 0;
- }
- /*
- INPUT FORMAT
- Line 1: Three space-separated integers:
- N, the number of jobs (1<=N<=1000).
- M1, the number of type "A" machines (1<=M1<=30)
- M2, the number of type "B" machines (1<=M2<=30)
- Line 2..etc: M1 integers that are the job processing times of each type "A" machine (1..20) followed by M2 integers, the job processing times of each type "B" machine (1..20).
- SAMPLE INPUT (file job.in)
- 5 2 3
- 1 1 3 1 4
- OUTPUT FORMAT
- A single line containing two integers: the minimum time to perform all "A" tasks and the minimum time to perform all "B" tasks (which require "A" tasks, of course).
- SAMPLE OUTPUT (file job.out)
- 3 5
- */
Advertisement
Add Comment
Please, Sign In to add comment