제출 #939427

#제출 시각아이디문제언어결과실행 시간메모리
939427JakobZorzJob Scheduling (CEOI12_jobs)C++17
100 / 100
258 ms20656 KiB
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<limits.h>
#include<math.h>
#include<map>
#include<set>
#include<unordered_map>
#include<unordered_set>
#include<iomanip>
#include<cstring>
#include<random>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
using namespace std;

int n,d,m;
vector<int>jobs[100000];

vector<vector<int>>get(int k){
    vector<vector<int>>res(n);
    queue<pair<int,int>>q;
    for(int i=0;i<n;i++){
        for(int j:jobs[i]){
            q.push({i+d,j});
        }
        
        if(q.size()&&q.front().first<i)
            return {};
        for(int j=0;j<k&&q.size();j++){
            res[i].push_back(q.front().second);
            q.pop();
        }
    }
    
    return res;
}

void solve(){
    cin>>n>>d>>m;
    for(int i=1;i<=m;i++){
        int a;
        cin>>a;
        jobs[a-1].push_back(i);
    }
    
    int l=0,r=m;
    while(l<r-1){
        int mid=(l+r)/2;
        if(get(mid).empty()){
            l=mid;
        }else{
            r=mid;
        }
    }
    cout<<r<<"\n";
    auto res=get(r);
    for(auto i:res){
        for(auto j:i){
            cout<<j<<" ";
        }
        cout<<"0\n";
    }
}

int main(){
    ios::sync_with_stdio(false);cout.tie(NULL);cin.tie(NULL);
    //freopen("/Users/jakob/cp_testing/test.txt","r",stdin);freopen("output.out","w",stdout);
    int t=1;//cin>>t;
    while(t--)solve();
    return 0;
}

/*
 
8 2 12
1 2 4 2 1 3 5 6 2 3 6 4
 
 */

#Verdict Execution timeMemoryGrader output
Fetching results...