Submission #1131036

#TimeUsernameProblemLanguageResultExecution timeMemory
1131036alyJob Scheduling (CEOI12_jobs)C++20
100 / 100
369 ms26496 KiB
/*
$$$$$$\              $$\     $$\
$$  __$$\             $$ |    $$ |
$$ /  $$ |$$\   $$\ $$$$$$\   $$$$$$$\   $$$$$$\   $$$$$$\        $$\
$$$$$$$$ |$$ |  $$ |\_$$  _|  $$  __$$\ $$  __$$\ $$  __$$\       \__|
$$  __$$ |$$ |  $$ |  $$ |    $$ |  $$ |$$ /  $$ |$$ |  \__|
$$ |  $$ |$$ |  $$ |  $$ |$$\ $$ |  $$ |$$ |  $$ |$$ |            $$\
$$ |  $$ |$$$$$$  |  $$$$  |$$ |  $$ |$$$$$$  |$$ |            \__|
\__|  \__| \______/    \____/ \__|  \__| \______/ \__|
$$$$$$$\                      $$$$$$$$\ $$\
$$  __$$\                     $$  _____|$$ |
$$ |  $$ | $$$$$$\   $$$$$$$\ $$ |      $$ | $$$$$$\  $$\   $$\
$$ |  $$ |$$  __$$\ $$  _____|$$$$$\    $$ |$$  __$$\ $$\ $$  |
$$ |  $$ |$$ /  $$ |$$ /      $$  __|   $$ |$$$$$$$$ | $$$$  /
$$ |  $$ |$$ |  $$ |$$ |      $$ |      $$ |$$   ____| $$  $$<
$$$$$$$  |$$$$$$  |$$$$$$$\ $$ |      $$ |$$$$$$$\ $$  /$$\
\_______/  \______/  \_______|\__|      \__| \_______|\__/  \__|
*/
#include <bits/stdc++.h>
using namespace std;

// clang-format off
// <----------------------- Macros Start Here ----------------------->

#define FastIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define el   '\n'
#define MOD1 1000000007
#define MOD2 998244353
#define INF numeric_limits<ll>::max()

#define forn(i, req) for (int i = 0; i < req; ++i)
#define forsn(i, st, req) for (int i = st; i < req; ++i)
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define popFront(x) x.erase(x.begin())
#define mp(x, y) make_pair(x, y)
#define pb push_back
#define ppb pop_back
#define ff first
#define ss second
typedef long long int ll;
// Typedefs Here
typedef long long int ll;
#define vp64 vector<pair<long long, long long>>
#define vp32 vector<pair<int, int>>
#define v32 vector<int>
#define v64 vector<long long>
typedef priority_queue<ll> priQueNorm;
typedef priority_queue<ll, vector<ll>, greater<ll> > priQueVec;

// <----------------------- Macros End Here ----------------------->

// <----------------------- Debug Utils Start Here ----------------------->
// #ifndef ONLINE_JUDGE
// #define debug(x) cerr << #x <<" "; _print(x); cerr << el;
// #else
// #define debug(x)
// #endif

void _print(ll t) { cerr << t; }
void _print(int t) { cerr << t; }
void _print(string t) { cerr << t; }
void _print(char t) { cerr << t; }
template <class T, class V> void _print(pair<T, V> p);
template <class T> void _print(vector<T> v);
template <class T> void _print(set<T> v);
template <class T, class V> void _print(map<T, V> v);
template <class T> void _print(multiset<T> v);
template <class T, class V> void _print(pair<T, V> p) { cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}"; }
template <class T> void _print(vector<T> v) { cerr << "[ "; for (T i : v) { _print(i); cerr << " "; } cerr << "]"; }
template <class T> void _print(set<T> v) { cerr << "[ "; for (T i : v) { _print(i); cerr << " "; } cerr << "]"; }
template <class T> void _print(multiset<T> v) { cerr << "[ "; for (T i : v) { _print(i); cerr << " "; } cerr << "]"; }
template <class T, class V> void _print(map<T, V> v) { cerr << "[ "; for (auto i : v) { _print(i); cerr << " "; } cerr << "]"; }

// Operator overloads
template<typename T1, typename T2>
istream& operator>>(istream &istream, pair<T1, T2> &p) { return (istream >> p.first >> p.second); }
template<typename T>
istream& operator>>(istream &istream, vector<T> &v) { for (auto &it : v) cin >> it; return istream; }
template<typename T1, typename T2>
ostream& operator<<(ostream &ostream, const pair<T1, T2> &p) { return (ostream << p.first << " " << p.second << el); }
template<typename T>
ostream& operator<<(ostream &ostream, const vector<T> &c) { for (auto &it : c) cout << it << " "; return ostream; }

// <----------------------- Debug Utils End Here ----------------------->

// <----------------------- Predefined Goodies Start Here ----------------------->

ll GCD(ll a, ll b) {if (b > a) {return GCD(b, a);} if (b == 0) {return a;} return GCD(b, a % b);}
ll LCM(ll a, ll b) { return (a / GCD(a, b)) * b; }
ll pwr(ll a, ll b, ll mod) {ll res = 1; while (b > 0) {if (b & 1)res = (res * a) % mod; a = (a * a) % mod; b = b >> 1;} return res;}
ll mminvprime(ll a, ll b) {return pwr(a, b - 2, b);}
ll modAdd(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
ll modMul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
ll modSub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
ll modDiv(ll a, ll b, ll m) {a = a % m; b = b % m; return (modMul(a, mminvprime(b, m), m) + m) % m;}
bool isPrime(ll n) { if(n < 2) return false; for(ll k = 2; k * k <= n; k++) if(n % k == 0) return false; return true; }

// <----------------------- Predefined Goodies End Here ----------------------->
pair<int,vector<v32>> firstTrue(int lo, int hi, function<pair<bool, vector<v32>>(int)> f) {
    hi++;
    vector<v32> res;
    while (lo < hi) {
        int md = (lo + hi) / 2;
        auto result = f(md);
        if (result.first) {
            res = result.second;
            hi = md;
        } else {
            lo = md + 1;
        }
    }
    return {lo, res};
}

// clang-format on
int n,d,m;
void solveMyProblem(istream &cin, ostream &cout, ll testCase) {
    cin >> n >> d >> m;
    vp32 jobs(m);

    forn(i, m) {
        int day;
        cin >> day;
        jobs[i] = {day, i + 1};
    }
    sort(all(jobs));

    pair<int, vector<v32>> ans = firstTrue(1, m, [&](int machines) {
        vector<v32> schedule(n);
        int reqnum = 0;

        forsn(day, 1, n + 1) {
            forn(machine, machines) {
                if (jobs[reqnum].first > day) break;
                if (jobs[reqnum].first + d >= day) {
                    schedule[day - 1].pb(jobs[reqnum++].second);
                } else {
                    return make_pair(false, schedule);
                }
                   if (reqnum == m) return make_pair(true, schedule);
            }
         
        }
        return make_pair(false, schedule);
    });
   cout<<ans.ff<<el;
  for (const auto &daySchedule : ans.second) {
        for (int job : daySchedule) cout << job << " ";
        cout << 0 << el;
    }

} 

int32_t main() {
// #ifndef ONLINE_JUDGE
//     freopen("input.txt", "r", stdin);
//     freopen("output.txt", "w", stdout);
//     freopen("error.txt", "w", stderr);
//     clock_t startClock = clock();
// #endif
    FastIO;
    istream &in(cin);
    ostream &out(cout);
    /*
    Start Coding Here
    */

    ll t = 1;
    // cin >> t;
    for (ll test = 1; test <= t; test++) {
        solveMyProblem(in, out, test);
    }

    /*
    Code Ends Here
    */
// #ifndef ONLINE_JUDGE
//     clock_t endClock = clock();
//     double timeTaken = double(endClock - startClock) / double(CLOCKS_PER_SEC);
//     cout << fixed << setprecision(7);
//     cout << "Time Taken: " << timeTaken << " Sec";
// #endif
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...