제출 #670815

#제출 시각아이디문제언어결과실행 시간메모리
670815vjudge1Job Scheduling (CEOI12_jobs)C++17
100 / 100
375 ms19680 KiB
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <algorithm> using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define mp make_pair #define pb push_back #define f first #define s second #define lb lower_bound #define ub upper_bound using vi = vector<int>; using ll = long long; using pii = pair<int, int>; const int maxn = 1000000 + 7; int n, d, m; pii task[maxn]; vi day[100007]; bool check(int mid) { rep(i, 0, n) { day[i].clear(); } int it = 0; rep(i, 0, n) { int cnt = 0; while (it < m) { if (task[it].f > i) break; if (i > task[it].f + d) { return false; } if (cnt < mid) { day[i].push_back(task[it].s); cnt++; it++; } else { break; } } } return true; } int main() { ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE //freopen("angry.in", "r", stdin); //freopen("angry.out", "w", stdout); #endif cin >> n >> d >> m; rep(i, 0, m) { cin >> task[i].f; task[i].f--; task[i].s = i + 1; } sort(task, task + m); int l = 0, r = m + 1; while (l < r) { int mid = l + (r - l) / 2; if (check(mid)) { r = mid; } else { l = mid + 1; } } cout << l << endl; rep(i, 0, n) { for (int id : day[i]) { cout << id << " "; } cout << 0 << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...