Submission #1258803

#TimeUsernameProblemLanguageResultExecution timeMemory
1258803tkhoi13Job Scheduling (CEOI12_jobs)C++20
100 / 100
80 ms13640 KiB
#include <bits/stdc++.h>
#define ll long long
#define db double
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
#define all(x) begin(x), end(x)
#define allr(x) rbegin(x), rend(x)
#define szx(x) ((int)(x).size())
#define FOR(i, a, b) for (int i = a, _b = (b); i <= _b; ++i)
#define ROF(i, a, b) for (int i = a, _b = (b); i >= _b; --i)
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define endl '\n'
#define inf 1000000007
#define mod 1000000007

using namespace std;

void setIO(string filename = "") {
    ios::sync_with_stdio(0);
    cin.tie(0);
    if (!filename.empty()) {
        if (ifstream(filename + ".in")) {
            freopen((filename + ".in").c_str(), "r", stdin);
            freopen((filename + ".out").c_str(), "w", stdout);
        }
    }
}

void solve() {
    int n, m, d;
    cin >> n >> d >> m;

    vector<vector<int>> tasks(n);

    REP(i, m) {
        int t;
        cin >> t;
        tasks[t - 1].pb(i);
    }

    auto f = [&](int x) -> bool {
        deque<pii> dq;
        REP(i, n) {
            int de = x;
            if (szx(tasks[i])) dq.pb({szx(tasks[i]), i});
            if (!dq.empty() && dq.front().se < i - d) return 0;
            while (!dq.empty() && de) {
                pii t = dq.front();
                dq.pop_front();
                int decrease = min(t.fi, de);
                de -= decrease;
                t.fi -= decrease;
                if (t.fi) dq.push_front(t);
            }
        }

        return dq.empty();
    };

    // REP(i, 10) cout << i << ' ' << f(i) << '\n';

    int l = 0, r = 1e9;
    while (l + 1 < r) {
        int x = (l + r) >> 1;
        // cout << l << ' ' << r << ' ' << x << ' ' << f(x) << '\n';
        if (f(x))
            r = x;
        else
            l = x;
    }

    cout << r << endl;
    queue<int> q;
    REP(i, n) {
        for (int t : tasks[i]) q.push(t);
        int de = r;
        while (!q.empty() && de) {
            cout << q.front() + 1 << ' ';
            q.pop();
            de--;
        }

        cout << 0 << '\n';
    }
}

int main() {
    setIO("cruise");
    int t = 1;
    // cin >> t;
    while (t--) solve();
}

Compilation message (stderr)

jobs.cpp: In function 'void setIO(std::string)':
jobs.cpp:25:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |             freopen((filename + ".in").c_str(), "r", stdin);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
jobs.cpp:26:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |             freopen((filename + ".out").c_str(), "w", stdout);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...