Submission #511474

#TimeUsernameProblemLanguageResultExecution timeMemory
511474whaaaaJob Scheduling (CEOI12_jobs)C++11
100 / 100
466 ms16708 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#define ll long long
#define all(x) x.begin(), x.end()
#define pi pair<int,int>
#define f first
#define s second
#define CHECKPOINT cout << "got here" << endl;
#define pb push_back
#define create_pfixsum(a,n,p) for(int i = 1; i < n; i++){p[i] = p[i-1] + a[i];}
using namespace std;
int n, d, m;
vector<vector<int>> ans;
vector<pi> a;
bool f(int l){
  int i = 0;
  int cur;
  for(int day = 1; day <= n; day++){
    cur = 0;
    while(i < m && a[i].f <= day && day <= a[i].f+d && cur < l){
      cur++;
      i++;
    }
  }
  if(i >= m){
    return true;
  }
  return false;
}

void printans(int l){
  ans.clear();
  ans.resize(n);
  int i = 0;
  int cur;
  for(int day = 1; day <= n; day++){
    cur = 0;
    while(i < m && a[i].f <= day && day <= a[i].f+d && cur < l){
      cout << a[i].s << ' ';
      cur++;
      i++;
    }
    cout << 0 << endl;
  }
}

int main() {
  cin >> n >> d >> m;
  a.resize(m);
  for(int i = 0; i < m ; i++){
    cin >> a[i].f;
    a[i].s = i+1;
  }
sort(all(a));
  int l = 1, r = m;
  while(l < r){
    int mid = l + (r-l) / 2;
    if(f(mid)){
      r = mid;
    } else {
      l = mid+1;
    }
  }
  cout << l << endl;
  printans(l);

}
#Verdict Execution timeMemoryGrader output
Fetching results...