MACHINE - Lập lịch trên 3 máy
Tác giả: RR
Ngôn ngữ: Java
import java.io.*;
import java.util.*;
class Job {
int a, b, c, index;
Job() {
}
Job(int a, int b, int c, int i) {
this.a = a;
this.b = b;
this.c = c;
this.index = i;
}
}
class JobComparatorAB implements Comparator <Job> {
public int compare(Job X, Job Y) {
if (X == null && Y == null) return 0;
if (X == null) return 1;
if (Y == null) return -1;
if (X.a + X.b < Y.a + Y.b) return -1;
else if (X.a + X.b > Y.a + Y.b) return 1;
else return 0;
}
}
class JobComparatorBC implements Comparator <Job> {
public int compare(Job X, Job Y) {
if (X == null && Y == null) return 0;
if (X == null) return 1;
if (Y == null) return -1;
if (X.b + X.c > Y.b + Y.c) return -1;
else if (X.b + X.c < Y.b + Y.c) return 1;
else return 0;
}
}
public class Main {
static int timeA = 0, timeB = 0, timeC = 0;
static void JobExecute(int a, int b, int c) {
timeA += a;
timeB = Math.max(timeA, timeB) + b;
timeC = Math.max(timeB, timeC) + c;
}
public static void main(String args[]) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String[] ta = br.readLine().split(" ");
String[] tb = br.readLine().split(" ");
String[] tc = br.readLine().split(" ");
Job[] list1 = new Job[n];
Job[] list2 = new Job[n];
int n1 = 0, n2 = 0;
for(int i = 0; i < n; i++) {
int a = Integer.parseInt(ta[i]);
int b = Integer.parseInt(tb[i]);
int c = Integer.parseInt(tc[i]);
if (a+b < b+c) list1[n1++] = new Job(a,b,c,i+1);
else list2[n2++] = new Job(a,b,c,i+1);
}
Comparator <Job> c1 = new JobComparatorAB();
Comparator <Job> c2 = new JobComparatorBC();
Arrays.sort(list1, c1);
Arrays.sort(list2, c2);
for(int i = 0; i < n1; i++)
JobExecute(list1[i].a, list1[i].b, list1[i].c);
for(int i = 0; i < n2; i++)
JobExecute(list2[i].a, list2[i].b, list2[i].c);
int res = timeC;
bw.write(res + " "); bw.newLine();
for(int i = 0; i < n1; i++)
bw.write(list1[i].index + " ");
for(int i = 0; i < n2; i++)
bw.write(list2[i].index + " ");
bw.close();
}
catch (Exception e) {
}
}
}