제출 #757816

#제출 시각아이디문제언어결과실행 시간메모리
757816taherJob Scheduling (CEOI12_jobs)C++17
100 / 100
357 ms22104 KiB
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, d, m;
  cin >> n >> d >> m;
  vector<int> a(m);
  for (int i = 0; i < m; i++) {
    cin >> a[i];
    --a[i];
  }
  vector<int> order(m);
  iota(order.begin(), order.end(), 0);
  sort(order.begin(), order.end(), [&](int i, int j) {
    return a[i] < a[j];
  });
 
  vector<vector<int>> days(n);
 
  auto Can = [&](int machines) {
    for (int i = 0; i < n; i++) {
      days[i].clear();
    }
    int day = 0;
    int emptyMachines = machines;
    for (int id = 0; id < m; id++) {
      int cur = a[order[id]];
      if (cur > day) {
        day = cur;
        emptyMachines = machines;
      } else if (cur + d < day) {
        return false;
      }
      days[day].push_back(order[id]);
      if (--emptyMachines == 0) {
        day++;
        emptyMachines = machines;
      }
    }
    return true;
  };
 
  int low = 1, high = 1000000000;
  while (low <= high) {
    int mid = low + (high - low) / 2;
    if (Can(mid)) {
      high = mid - 1;
    } else {
      low = mid + 1;
    }
  }
 
  Can(high + 1);
 
  cout << high + 1 << '\n';
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (int) days[i].size(); j++) {
      if (j > 0) {
        cout << " ";
      }
      cout << 1 + days[i][j];
    }
    if ((int) days[i].size() > 0) {
      cout << " ";
    }
    cout << "0\n";
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...