Submission #1171746

#TimeUsernameProblemLanguageResultExecution timeMemory
1171746abdulaziz707Job Scheduling (CEOI12_jobs)C++20
100 / 100
217 ms31120 KiB
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
using namespace std;

using ll = long long;

const int inf = 2e18 + 31, mod = 1e9 + 7, MX = 1e5 + 1;
const double eps = 1e-8;

int gcd(int a, int b){
    return b ? gcd(b, a%b) : a;
}

int lcm(int a, int b){
    return a/gcd(a, b)*b;
}

void solve(){
    /*
    8 2 12
    1 2 4 2 1 3 5 6 2 3 6 4
    */
    int n, d, m;
    cin >> n >> d >> m;
    vector<pair<int,int>> job(m);
    for(int day, i = 0; i < m; i++){
        cin >> day;
        job[i].first = day;
        job[i].second = i + 1;
    }

    sort(all(job));
    vector<vector<int>> schedule;
    int l = 1, r = m, mid;

    function<bool(int)> check = [&](int num){
        int pos = 0;
        for(int day = 1; day <= n; day++){
            for(int j = 0; j < num && pos < m && job[pos].first <= day; j++){
                if(day - job[pos].first > d)
                    return false;
                pos++;
            }
        }
        if(pos == m) {
            pos = 0;
            schedule.assign(n + 1, vector<int>(0));
            for(int day = 1; day <= n; day++){
                for(int j = 0; j < num && pos < m && job[pos].first <= day; j++){
                    schedule[day].push_back(job[pos++].second);
                }
            }
            return true;
        }
        return false;
    };

    while(l < r){
        mid = l + (r - l)/2;

        if(check(mid))
            r = mid;
        else
            l = mid + 1;
    }
    cout << l << endl;
    for(int day = 1; day <= n; day++){
        for(auto job_id : schedule[day])
            cout << job_id << ' ';
        cout << "0\n";
    }
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int tt = 1;
    //cin >> tt;
    while(tt --){
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...