제출 #535388

#제출 시각아이디문제언어결과실행 시간메모리
535388PyrodoxJob Scheduling (CEOI12_jobs)C++17
80 / 100
658 ms44188 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ll n, d, m; //ios::sync_with_stdio(false); //cin.tie(nullptr); cin >> n >> d >> m; vector<ll> jobs(m); map<ll, vector<ll>> mp; map<ll, ll> val; for (ll i = 1; i <= m; ++i) { ll a; cin >> a; jobs[i - 1] = a; mp[a].push_back(i); } sort(jobs.begin(), jobs.end()); vector<vector<ll>> ans; ll l = 1, r = m; while (l < r) { ll mid = l + (r - l) / 2, start = 0; //cout << "testing mid: " << mid << "\n"; bool check = true; vector<vector<ll>> jobstmp(n); for (ll i = 0; i < n && check; ++i) { //cout << i << "\n"; for (ll 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 (ll 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 (ll j : i) { cout << mp[j][val[j]] << " "; ++val[j]; } cout << "0\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...