Submission #1135721

#TimeUsernameProblemLanguageResultExecution timeMemory
1135721tjonacJob Scheduling (CEOI12_jobs)C++20
20 / 100
92 ms13892 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define MOD 998244353
#define mod 1000000007
#define INF 1000000000000000
#define inf 1000000000
//#define f first
//#define s second 
bool check(int k,int d, vector<int>& jobs){
  int n=jobs.size(),l=1,curr=jobs[1];
  for(int i=1;i<n-d;i++){
    for(int j=0;j<k;j++){
      if(curr==0){
        l++;
        curr=jobs[l];
      }
      if(l+d<i) return false;
      if(l>i) break;
      curr--;
    }
  }
  return true;
}
int bin_search(int d, vector<int>& jobs){
  int l=1, r=2000000,res=-1;
  while(l<=r){
    int mid=l+(r-l)/2;
    if(check(mid,d,jobs)){
      res=mid;
      r=mid-1;
    }
    else l=mid+1;
  }
  return res;
}
void solve(){
  int n,d,m; cin>>n>>d>>m;
  vector<int> jobs(n+1,0);
  vector<vector<int>> jobsindex(n+1);
  for(int i=0;i<m;i++){
    int a; cin>>a;
    jobs[a]++;
    jobsindex[a].pb(i+1);
  } 
  int k=bin_search(d,jobs),l=1,r=0;
  cout<<k<<'\n';
  for(int i=1;i<=n;i++){
    for(int j=0;j<k;j++){
      if(l>n) break;
      while(r==jobs[l] || l>n){
        l++;
        r=0;
        if(l>n) break;
      }
      if(l>i) break;
      cout<<jobsindex[l][r]<<' ';
      r++;
    }
    cout<<"0\n";
  }
}
int main(){
  ios_base::sync_with_stdio(false);  cin.tie(0);  cout.tie(0);
  int t=1; for(int T=0;T<t;T++) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...