Submission #474786

#TimeUsernameProblemLanguageResultExecution timeMemory
474786sbane13Job Scheduling (CEOI12_jobs)Java
0 / 100
1100 ms43180 KiB
import java.util.*;

public class jobs {

    static int n, d, m;

    static ArrayList<Job> jobs = new ArrayList<>();

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        n = in.nextInt(); d = in.nextInt(); m = in.nextInt();


        for(int i = 0; i < m; i++){
            jobs.add(new Job(in.nextInt(), i));
        }

        Collections.sort(jobs);

        int s = 1, e = 1000000000;

        while (s != e) {
            int mid = (s+e)/2;
            if (is_pos(mid)) {
                e = mid;
            } else {
                s = mid + 1;
            }
        }

        int ans = s;

        System.out.println(ans);

        int i = 0, j = 0;

        for (int day = 1; day <= n; day++) {
            while (j < jobs.size() && j - i + 1 <= ans && jobs.get(j).job <= day) {
                j++;
            }
            while (i < j) {
                System.out.print(jobs.get(i).day + 1 + " ");
                i++;
            }

            System.out.println("0");

        }
    }

    static boolean is_pos(int mid) {
        int i = 0, j = 0;

        for (int day = 1; day <= n; day++) {
            while (j < jobs.size() && j - i + 1 <= mid && jobs.get(j).job <= day) {
                j++;
            }
            while (i < j) {
                if (day - jobs.get(i).job > d) return false;
                i++;
            }
        }

        return i >= n;
    }

    static class Job implements Comparable<Job>{
        int job, day;

        public Job(int job, int day) {
            this.job = job;
            this.day = day;
        }

        public int compareTo(Job o) {
            return this.job-o.job;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...