제출 #498092

#제출 시각아이디문제언어결과실행 시간메모리
498092LouayFarahJob Scheduling (CEOI12_jobs)C++14
40 / 100
279 ms22160 KiB
#include "bits/stdc++.h"

using namespace std;

#define endl "\n"
#define ll long long int
#define pb push_back
#define mp make_pair
#define fi first
#define se second

const long long MOD = 1e9+7;
const long long INF = 1e18;

int nx[4] = {0, 0, -1, 1};
int ny[4] = {1, -1, 0, 0};


bool f(queue<ll> q, ll d, ll mid)
{
    ll currd = 1;
    ll c = mid;
    while(!q.empty())
    {
        if(c==0)
        {
            currd++;
            c = mid;
        }

        ll task = q.front();
        if(currd<task)
        {
            currd = task;
            c = mid;
        }

        if(currd>task+d)
        {
            return false;
        }
        q.pop();
        c--;
    }

    return true;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);


    ll n, d, m;
    cin >> n >> d >> m;

    vector<ll> arr(m, 0);
    for(int i = 0; i<m; i++)
        cin >> arr[i];

    sort(arr.begin(), arr.end());

    //vector<ll> occ(n+1, 0);
    queue<ll> q;
    for(int i = 0; i<m; i++)
    {
        //occ[arr[i]]++;
        q.push(arr[i]);
    }

    /*ll lim = 0;
    for(int i = 0; i<=n; i++)
    {
        lim = max(lim, occ[i]);
    }*/

    ll l = 0; //l is bad
    ll r = m+1; //r is good

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

        if(f(q, d, mid))
        {
            r = mid;
        }
        else
        {
            l = mid;
        }
    }

    cout << r << endl;

    ll curr = 0;
    for(int i = 0; i<n; i++)
    {
        ll lim = 0;
        while(curr<m)
        {
            if(lim==r)
                break;
            cout << 1 << ' ';
            lim++;
            curr++;
        }
        cout << 0 << endl;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...