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) {
	}
	}
}

Download