Submission #1300825

#TimeUsernameProblemLanguageResultExecution timeMemory
1300825sz_3312Job Scheduling (CEOI12_jobs)Java
0 / 100
1101 ms131072 KiB
import java.io.*; import java.util.*; public class jobs { static class Job { int day, id; Job(int d, int i) { day = d; id = i; } } static int N, D, M; static Job[] jobs; // Try using K machines. If feasible, return schedule; else return null. static List<List<Integer>> feasible(int K) { List<List<Integer>> schedule = new ArrayList<>(); for (int i = 0; i < N; i++) schedule.add(new ArrayList<>()); int ptr = 0; // pointer into sorted jobs for (int day = 1; day <= N; day++) { for (int used = 0; used < K; used++) { if (ptr == M) return schedule; // all jobs scheduled // if next job's arrival day is > this day, we can't schedule more today if (jobs[ptr].day > day) break; // deadline check if (jobs[ptr].day + D < day) return null; // missed deadline → infeasible // schedule this job on this day schedule.get(day - 1).add(jobs[ptr].id); ptr++; } } if (ptr < M) return null; // some jobs not scheduled → fail return schedule; } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); D = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); jobs = new Job[M]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < M; i++) { int day = Integer.parseInt(st.nextToken()); jobs[i] = new Job(day, i + 1); } Arrays.sort(jobs, Comparator.comparingInt(a -> a.day)); int lo = 1, hi = M; List<List<Integer>> answerSchedule = null; while (lo < hi) { int mid = (lo + hi) / 2; List<List<Integer>> test = feasible(mid); if (test != null) { hi = mid; answerSchedule = test; } else { lo = mid + 1; } } // final check with lo machines if (answerSchedule == null) answerSchedule = feasible(lo); StringBuilder out = new StringBuilder(); out.append(lo).append("\n"); for (int day = 0; day < N; day++) { for (int id : answerSchedule.get(day)) out.append(id).append(" "); out.append(0).append("\n"); } System.out.println(out); } }
#Verdict Execution timeMemoryGrader output
Fetching results...