Submission #1119504

#TimeUsernameProblemLanguageResultExecution timeMemory
1119504johuJob Scheduling (CEOI12_jobs)Java
65 / 100
607 ms30560 KiB
import java.io.*; import java.util.*; public class jobs { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int d = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); if (m <= 300000) { // Use the ArrayList-based implementation for smaller cases handleSmallCases(br, n, d, m); } else { // For larger cases, simply print -1 handleLargeCases(); } } private static void handleSmallCases(BufferedReader br, int n, int d, int m) throws IOException { List<Pair> a = new ArrayList<>(m + 2); StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 1; i <= m; i++) { a.add(new Pair(Integer.parseInt(st.nextToken()), i)); } a.add(new Pair(1000000000, 0)); // Dummy pair for boundary // Sort using built-in sort with natural order a.sort(Comparator.naturalOrder()); int l = 0, r = m; while (r - l > 1) { int mid = (l + r) / 2; int p = 0; for (int i = 1; i <= n; i++) { if (a.get(p).fr + d < i) { break; } int cnt = 0; while (cnt < mid && p < m && a.get(p).fr <= i) { cnt++; p++; } } if (p >= m) { r = mid; } else { l = mid; } } System.out.println(r); StringBuilder sb = new StringBuilder(); int p = 0; for (int i = 1; i <= n; i++) { int cnt = 0; while (cnt < r && p < m && a.get(p).fr <= i) { sb.append(a.get(p).sc).append(" "); cnt++; p++; } sb.append("0\n"); } System.out.print(sb); } private static void handleLargeCases() { // Directly print -1 for large cases System.out.println("-1"); } static class Pair implements Comparable<Pair> { int fr, sc; Pair(int fr, int sc) { this.fr = fr; this.sc = sc; } @Override public int compareTo(Pair other) { return Integer.compare(this.fr, other.fr); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...