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...