Submission #708508

#TimeUsernameProblemLanguageResultExecution timeMemory
708508jsathu07Job Scheduling (CEOI12_jobs)C++14
55 / 100
278 ms20680 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

bool calc(int n, int d, int x, vector<int> &arr, int m)
{
    int j = 0;
    bool p = true;
    for (int i = 0; i < n; i++)
    {
        int y = x;
        while (y-- && j < m)
        {
            if (!(i + 1 <= arr[j] + d))
            {
                p = false;
                break;
            }
            // cout << "day " << i + 1 << " processed " << j + 1 << " \n";
            j++;
        }
        if (!p)
            break;
    }
    return p;
}

void solve()
{
    int n, d, m;
    cin >> n >> d >> m;
    vector<int> arr(m, 0);
    vector<pair<int, int>> brr;
    for (int i = 0; i < m; i++)
    {
        cin >> arr[i];
        brr.push_back({arr[i], i + 1});
    }
    sort(brr.begin(), brr.end());
    sort(arr.begin(), arr.end());
    int l = 1, r = 1e6, ans = 1e6;
    while (l <= r)
    {
        int mid = (l + r) / 2;
        if (calc(n, d, mid, arr, m))
        {
            ans = mid;
            r = mid - 1;
        }
        else
        {
            l = mid + 1;
        }
    }
    cout << ans << "\n";
    int k = 0, rem = 0;
    for (auto &i : brr)
    {
        if (k == ans)
        {
            cout << 0 << "\n";
            k = 0;
            rem++;
        }
        cout << i.second << " ";
        k++;
    }
    rem++;
    cout << 0 << "\n";
    int q = n - rem;
    while (q--)
    {
        cout << 0 << "\n";
    }
}

// void setIO(string s)
// {
//     freopen((s + ".in").c_str(), "r", stdin);
//     freopen((s + ".out").c_str(), "w", stdout);
// }

int main()
{
    // setIO("bcount");
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...