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