제출 #447239

#제출 시각아이디문제언어결과실행 시간메모리
447239erkeJob Scheduling (CEOI12_jobs)C++11
100 / 100
440 ms27204 KiB
#include <bits/stdc++.h>
using namespace std;

int n, d, m;
deque<pair<int,int>> dq;
vector<vector<int>> res;

bool check(int x) {
  res.assign(n + 1, vector<int>());
  int p = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= x; j++) {
      int t = dq[p].first;
      if (t > i) break;
      if (t + d >= i) {
        res[i].push_back(dq[p].second);
        p++;
      }
      else return false;
      if (p == m) return true;
    }
  }
  return false;
}

int main() {
  cin.tie(0)->sync_with_stdio(0);
  cin >> n >> d >> m;
  dq.resize(m);
  for (int i = 0; i < m; i++) {
    cin >> dq[i].first;
    dq[i].second = i + 1;
  }
  sort(dq.begin(), dq.end());
  int l = 1, r = m, ans = -1;
  vector<vector<int>> sav;
  while (l <= r) {
    int x = (l + r) / 2;
    if (check(x)) {
      ans = x;
      sav = res;
      r = x - 1;
    }
    else l = x + 1;
  }
  cout << ans << '\n';
  for (int i = 1; i <= n; i++) {
    for (auto &j : sav[i]) cout << j << ' ';
    cout << 0 << '\n';
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...