제출 #1270351

#제출 시각아이디문제언어결과실행 시간메모리
1270351victorj0902Job Scheduling (CEOI12_jobs)C++20
55 / 100
123 ms20060 KiB
#include <bits/stdc++.h> using namespace std; struct job { int time; int idx; bool operator < (const job &other) const { return time < other.time; } }; const int MAX_M = 1e6 + 10; job a[MAX_M]; vector<vector<int>> ans(100010); int n, m, d; bool check(int k) { int cur_day = 1; for (int i = 1; i <= m; i += k) { if (cur_day > n) return false; if (a[i].time < cur_day) return false; cur_day++; } return true; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> d >> m; for (int i = 1; i <= m; i++) { cin >> a[i].time; a[i].time += d; // Adjust deadline a[i].idx = i; // Original index } sort(a + 1, a + m + 1); // Sort by deadline (time) // Binary search to find minimum number of machines per day int l = 1, r = m; int best_k = m; while (l <= r) { int mid = (l + r) / 2; if (check(mid)) { best_k = mid; r = mid - 1; } else { l = mid + 1; } } cout << best_k << '\n'; // Assign jobs into groups of size `best_k` for (int i = 1; i <= m; i++) { int day = ((i - 1) / best_k) + 1; ans[day].push_back(a[i].idx); } // Output exactly `n` lines, each ending with 0 for (int i = 1; i <= n; i++) { for (int j = 0; j < ans[i].size(); j++) { cout << ans[i][j] << " "; } cout << "0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...