Submission #1168643

#TimeUsernameProblemLanguageResultExecution timeMemory
1168643abdulaziz707Job Scheduling (CEOI12_jobs)C++20
40 / 100
235 ms27468 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(){
    /*
    */
    int n, m, d;
    cin >> n >> d >> m;
    vector<vector<int>> schedule(n + 1, vector<int>());
    for(int i = 1, x; i <= m; i++) {
        cin >> x;
        schedule[x].push_back(i);
    }
    int l = 1, r = m, mid;
    function<bool(int)> check = [&](int num){
        queue<pair<int,int>> q;
        vector<vector<int>> tsch = schedule;

        for(int day = 1; day <= n; day++) {
            for(auto x : tsch[day]) {
                q.push(make_pair(x, day));
            }
            tsch[day].clear();

            pair<int,int> p;
            for(int i = 0; i < num && !q.empty(); i++){
                p = q.front();
                q.pop();

                if(day - p.second > d)
                    return false;

                tsch[day].push_back(p.first);
            }
        }
        if (q.size() == 0)
            schedule = tsch;
        return q.size() == 0;
    };
    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 x : schedule[day])
            cout << x << ' ';
        cout << 0 << endl;
    }
}

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...