Submission #677523

#TimeUsernameProblemLanguageResultExecution timeMemory
677523triet123vnJob Scheduling (CEOI12_jobs)C++11
40 / 100
370 ms23296 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const string FNAME = "jobschedule"; const int MAXN = 100002, MAXM = 1000000; struct Job { int numJob, deadline; Job() {} Job(int num, int d) { numJob = num; deadline = d; } }; struct cmp { bool operator() (const Job &a, const Job &b) { if (a.deadline == b.deadline) return a.numJob < b.numJob; return a.deadline > b.deadline; } }; vector<pair<int, int>> logs[MAXN]; int dayJobs[MAXN], tempDay[MAXN], iter[MAXN]; int n, delays, m; vector<int> dayIndex[MAXN]; bool goodJob(int machineNum) { priority_queue<Job, vector<Job>, cmp> q; for (int i = 1; i <= n; ++i) { logs[i].clear(); q.push(Job(dayJobs[i], i + delays)); int remain = machineNum - q.top().numJob; while (q.size() && remain >= 0) { logs[i].push_back(make_pair(q.top().numJob, q.top().deadline - delays)); q.pop(); if (q.size()) remain -= q.top().numJob; } if (q.size() && remain < 0) { if (q.top().numJob + remain) logs[i].push_back(make_pair(q.top().numJob + remain, q.top().deadline - delays)); Job j = q.top(); j.numJob = -remain; q.pop(); q.push(j); } } return q.empty(); } int minMachine(int l, int r) { if (l == r) { goodJob(l); return l; } int mid = (l + r) / 2; if (goodJob(mid)) return minMachine(l, mid); return minMachine(mid + 1, r); } int main() { ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); // freopen((FNAME + ".in").c_str(), "r", stdin); // freopen((FNAME + ".out").c_str(), "w", stdout); cin >> n >> delays >> m; for (int i = 0; i < m; ++i) { int day; cin >> day; ++dayJobs[day]; dayIndex[day].push_back(i+1); } cout << minMachine(1, 1000000) << endl; for (int i = 1; i <= n; ++i) { for (pair<int, int> log: logs[i]) { // cout << log.first << " " << log.second << "\n"; for (int i = 0; i < log.first; ++i) { cout << dayIndex[log.second][iter[log.second]++] << " "; } } cout << "0" << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...