제출 #1138435

#제출 시각아이디문제언어결과실행 시간메모리
1138435mrsmartypantsJob Scheduling (CEOI12_jobs)Java
40 / 100
1100 ms115204 KiB
import java.io.*; import java.util.*; public class jobs { static ArrayList<ArrayList<Integer>> schedule = new ArrayList<>(); static int N, D, M; static Request[] jobs; public static void main(String... args) throws IOException { // BufferedReader reader = new BufferedReader(new FileReader("input.in")); BufferedReader reader = new BufferedReader(new InputStreamReader(new DataInputStream(System.in))); PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); StringTokenizer st = new StringTokenizer(reader.readLine()); N = Integer.parseInt(st.nextToken()); D = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); st = new StringTokenizer(reader.readLine()); jobs = new Request[M]; for (int i = 0; i < M; i++) { jobs[i] = new Request(i + 1, Integer.parseInt(st.nextToken())); } Arrays.sort(jobs, Comparator.comparingInt(j -> j.day)); // System.out.println(Arrays.toString(jobs)); int lo = 1; int hi = M; while (lo < hi) { int mid = lo + (hi - lo) / 2; if (test(mid)) { hi = mid; } else { lo = mid + 1; } } writer.println(lo); int reqNum = 0; o: for (int day = 1; day <= N; day++) { schedule.add(new ArrayList<>()); for (int j = 0; j < lo; j++) { if (jobs[reqNum].day > day) break; if (jobs[reqNum].day + D >= day) { schedule.get(day - 1).add(jobs[reqNum].id); reqNum++; } if (reqNum == M) break o; } } while (schedule.size() < N) schedule.add(new ArrayList<>()); for (ArrayList<Integer> ds : schedule) { for (int z : ds) { writer.print(z + " "); } writer.println(0); } writer.close(); } static boolean test(int numMachines) { int reqNum = 0; for (int day = 1; day <= N; day++) { for (int j = 0; j < numMachines; j++) { if (jobs[reqNum].day > day) break; if (jobs[reqNum].day + D >= day) { reqNum++; } else { return false; } if (reqNum == M) return true; } } return false; } static class Request { int id; int day; public Request(int id, int day) { this.id = id; this.day = day; } @Override public String toString() { return "Request{" + "id=" + id + ", day=" + day + '}'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...