TWO - Lập lịch trên 2 máy

Tác giả: khuc_tuan

Ngôn ngữ: Java

import java.io.*;
import java.util.*;

public class Main {
	static class CV {
		public int a,b,i,t;
	}
	public static void main(String[] Args) throws Exception {
		BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(kb.readLine());
		CV[] c=new CV[n];
		for(int i=0;i<n;++i) c[i]=new CV();
		StringTokenizer st=new StringTokenizer(kb.readLine());
		for(int i=0;i<n;++i) c[i].a = Integer.parseInt(st.nextToken());
		st=new StringTokenizer(kb.readLine());
		for(int i=0;i<n;++i) c[i].b = Integer.parseInt(st.nextToken());
		for(int i=0;i<n;++i) {
			c[i].i=i;
			if(c[i].a<c[i].b) c[i].t=1;
			else c[i].t=2;
		}
		Arrays.sort(c, new Comparator<CV>() {
			public int compare(CV x,CV y) {
				if(x.t!=y.t) return x.t-y.t;
				if(x.t==1) return x.a-y.a;
				if(x.t==2) return y.b-x.b;
				return 0;
			}
		});
		int ta=0,tb=0;
		for(int i=0;i<n;++i) {
			ta += c[i].a;
			if(tb<ta) tb=ta;
			tb += c[i].b;
		}
		System.out.println(Math.max(ta,tb));
		for(int i=0;i<n;++i) System.out.print(c[i].i+1+" ");
		System.out.println();
	}
}

Download