Submission #658649

#TimeUsernameProblemLanguageResultExecution timeMemory
658649stephencJob Scheduling (CEOI12_jobs)C++17
100 / 100
423 ms26404 KiB
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
using pi = pair<int,int>;
using vi = vector<int>;

int n, m, d;

pair<bool, vector<vi>> isFeasible(vector<pair<int,int>>& jobs, int machineCount) {
    vector<vi> schedule(n);
    int reqNum=0;
    for (int day=1; day<=n; ++day) {
        for (int j=0; j<machineCount; ++j) {
            if (jobs[reqNum].first>day) break;
            if (jobs[reqNum].first+d>=day) {
                schedule[day-1].push_back(jobs[reqNum++].second);
            } else {
                return make_pair(false, schedule);
            }

            if (reqNum==m) {
                return make_pair(true, schedule);
            }
        }
    }
    return make_pair(false, schedule);
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin>>n>>d>>m;
    vector<pi> jobs(m);
    for (int i=0; i<m; ++i) {
        int day;
        cin>>day;
        jobs[i]={day, i+1};
    }
    sort(begin(jobs), end(jobs));
    vector<vi> result;
    int l=1, r=m;
    while (l<r) {
        int machineNum=l+(r-l)/2;
        pair<bool, vector<vi>> curResult = isFeasible(jobs, machineNum);
        if (curResult.first) {
            r=machineNum;
            result=curResult.second;
        } else {
            l=machineNum+1;
        }
    }
    cout<<l<<"\n";
    for (int i=0; i<n; ++i) {
        for (int& idx : result[i]) {
            cout<<idx<<" ";
        }
        cout<<0<<"\n";
    }
}

/*
8 2 12
1 2 4 2 1 3 5 6 2 3 6 4
*/
#Verdict Execution timeMemoryGrader output
Fetching results...