Submission #1135669

#TimeUsernameProblemLanguageResultExecution timeMemory
1135669tjonacJob Scheduling (CEOI12_jobs)C++20
55 / 100
84 ms17576 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 s=0,n=jobs.size();
  for(int i=1;i<n;i++){
    s+=jobs[i];
    if(s%k){
      if(s/k+1>i+d) return false;
    }
    else{
      if(s/k>i+d) return false;
    }
  }
  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),jobssorted;
  vector<vector<int>> jobsindex(n+1);
  for(int i=0;i<m;i++){
    int a; cin>>a;
    jobs[a]++;
    jobsindex[a].pb(i+1);
  }
  for(int i=1;i<=n;i++) for(auto&u:jobsindex[i]) jobssorted.pb(u); 
  int k=bin_search(d,jobs);
  cout<<k<<'\n';
  for(int i=0;i<n;i++){
    for(int j=1;j<=k;j++){
      if(i*k+j>m){
        break;
      }
      cout<<jobssorted[i*k+j-1]<<' ';
    }
    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...