제출 #535390

#제출 시각아이디문제언어결과실행 시간메모리
535390PyrodoxJob Scheduling (CEOI12_jobs)C++17
100 / 100
461 ms27820 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, d, m; //ios::sync_with_stdio(false); //cin.tie(nullptr); cin >> n >> d >> m; vector<int> jobs(m); unordered_map<int, vector<int>> mp; unordered_map<int, int> val; for (int i = 1; i <= m; ++i) { int a; cin >> a; jobs[i - 1] = a; mp[a].push_back(i); } sort(jobs.begin(), jobs.end()); vector<vector<int>> ans; int l = 1, r = m; while (l < r) { int mid = l + (r - l) / 2, start = 0; //cout << "testing mid: " << mid << "\n"; bool check = true; vector<vector<int>> jobstmp(n); for (int i = 0; i < n && check; ++i) { //cout << i << "\n"; for (int j = 0; j < mid && start <= m - 1; ++j) { //cout << "bat\n"; if (jobs[start] <= i + 1 && i + 1 - jobs[start] <= d) { jobstmp[i].push_back(jobs[start]); ++start; //cout << "at\n"; } else if (i + 1 - jobs[start] > d) { check = false; break; } else { break; } } } /*for (auto val : jobstmp) { for (int i : val) { cout << i << " "; } cout << "\n"; }*/ //cout << "start: " << start << " check: " << "\n"; if (check && start == m) { //cout << "r from " << r << " to r -> " << mid << "\n"; r = mid; ans = jobstmp; } else { //cout << "l from " << l << " to l -> " << mid << " + 1\n"; l = mid + 1; } } cout << l << "\n"; for (auto i : ans) { for (int j : i) { cout << mp[j][val[j]] << " "; ++val[j]; } cout << "0\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...