Submission #1171743

#TimeUsernameProblemLanguageResultExecution timeMemory
1171743abdulaziz707Job Scheduling (CEOI12_jobs)C++20
80 / 100
228 ms42356 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, res;
    int l = 1, r = m, mid;

    function<bool(int)> check = [&](int num){
        schedule.assign(n + 1, vector<int>(0));
        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;
                schedule[day].push_back(job[pos++].second);
            }
        }
        return pos == m;
    };

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

        if(check(mid)) {
            r = mid;
            res = schedule;
        }
        else
            l = mid + 1;
    }
    cout << l << endl;
    for(int day = 1; day <= n; day++){
        for(auto job_id : res[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...