제출 #705735

#제출 시각아이디문제언어결과실행 시간메모리
705735hexJob Scheduling (CEOI12_jobs)Java
40 / 100
1083 ms53700 KiB
import java.io.*;
import java.util.*;

class Kattio extends PrintWriter {
	private BufferedReader r;
	private StringTokenizer st;
	// standard input
	public Kattio() { this(System.in, System.out); }
	public Kattio(InputStream i, OutputStream o) {
		super(o);
		r = new BufferedReader(new InputStreamReader(i));
	}
	// USACO-style file input
	public Kattio(String problemName) throws IOException {
		super(problemName + ".out");
		r = new BufferedReader(new FileReader(problemName + ".in"));
	}
	// returns null if no more input
	public String next() {
		try {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(r.readLine());
			return st.nextToken();
		} catch (Exception e) {}
		return null;
	}
	public int nextInt() { return Integer.parseInt(next()); }
	public double nextDouble() { return Double.parseDouble(next()); }
	public long nextLong() { return Long.parseLong(next()); }
}

public class jobs {
	static Req[] reqs;
	static int numReq;
	static int delay;
 
	static class Req implements Comparable<Req> {
		int day;
		int id;
 
		public Req (int day, int id) {
			this.day = day;
			this.id = id;
		}
		
		public int compareTo (Req r) {
			//Comparing by id is not needed here.
			return Integer.compare(this.day, r.day);
		}
	}
	//Check if changing reqs to a static array will be fater
	static boolean valid (int numMachine) {
		int day = reqs[0].day - delay;
		for (int r = 0; r < numReq; r += numMachine) {
			if (reqs[r].day < day) return false;
			day++;
		}
		return true;
	}
 
	public static void main (String[] args) throws IOException {
		Kattio io = new Kattio();
		int days = io.nextInt();
		delay = io.nextInt();
		numReq = io.nextInt();
		reqs = new Req[numReq];
		for (int r = 0; r < numReq; r++) {
			reqs[r] = new Req(io.nextInt() + delay, r + 1);
		}
		Arrays.sort(reqs);
 
		int lt = 1;
		int rt = numReq + 1;
		int mid;
		while (lt < rt) {
			mid = (lt + rt) / 2;
			if (valid(mid)) {
				rt = mid;
			} else {
				lt = mid + 1;
			}
		}
 
		//At the end, just loop through reqs in sorted order and print out lt ids in a single line, followed by a 0
		
		io.println(lt);
		for (int d = 1; d < reqs[0].day - delay; d++) {
			io.println(0);
		}
		int r = 0;
		for (int d = reqs[0].day - delay; d <= days; d++) {
			int num = 0;
			while (r < reqs.length && num < lt) {
				io.print(reqs[r].id + " ");
				r++;
				num++;
			}
			io.println(0);
			//out.println();
		}
		//out.println(valid(1, delay, reqs));
		io.close();
	}
}
//Check N = 1.
//Check for needed longs.
//Use Long.parseLong() instead of Integer.parseInt().
//Use Long.MAX_VALUE instead of Integer.MAX_VALUE.
//Use an int array of ids instead of a boolean array of visited nodes during DFS.
//Declare a class variable instead of a method parameter, as passing by value could result in a TLE.
#Verdict Execution timeMemoryGrader output
Fetching results...