제출 #525931

#제출 시각아이디문제언어결과실행 시간메모리
525931pawnedJob Scheduling (CEOI12_jobs)C++17
100 / 100
593 ms20896 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; int N, D, M; // days, max delay, reqs ii numbers[1000050]; vector<int> answers[100050]; int final = -1; bool check(int n) { // checks if n machines is enough int needed[2 * N] = {0}; int latest = 0; for (int i = 0; i < M; i++) { // finds earliest possible time for each latest = max(latest, numbers[i].fi); while (needed[latest] == n) latest++; if (latest - numbers[i].fi > D) return false; needed[latest]++; if (n == final) answers[latest].pb(numbers[i].se); } return true; } int main() { cin>>N>>D>>M; for (int i = 0; i < M; i++) { cin>>numbers[i].fi; numbers[i].se = i + 1; } sort(numbers, numbers + M); int low = 0; int high = 1e9; int ans = -1; while (low <= high) { // false, false, false, true, true, true int mid = (low + high) / 2; if (check(mid)) { ans = mid; high = mid - 1; } else { low = mid + 1; } } cout<<ans<<endl; final = ans; check(ans); for (int i = 1; i <= N; i++) { for (int j : answers[i]) cout<<j<<" "; cout<<0<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...