Submission #677490

#TimeUsernameProblemLanguageResultExecution timeMemory
677490triet123vnJob Scheduling (CEOI12_jobs)C++11
0 / 100
130 ms2636 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; } }; int dayJobs[MAXN], tempDay[MAXN]; int n, delays, m; bool goodJob(int machineNum) { priority_queue<Job, vector<Job>, cmp> q; for (int i = 1; i <= n; ++i) { q.push(Job(dayJobs[i], i + delays)); int remain = machineNum - q.top().numJob; while (q.size() && remain >= 0) { q.pop(); if (q.size()) remain -= q.top().numJob; } if (q.size() && remain < 0) { Job j = q.top(); j.numJob = -remain; q.pop(); q.push(j); } } return q.empty(); } int minMachine(int l, int r) { if (l == r) 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]; } cout << minMachine(1, 1000000); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...