Submission #939888

#TimeUsernameProblemLanguageResultExecution timeMemory
939888lucascgarJob Scheduling (CEOI12_jobs)C++17
100 / 100
509 ms23392 KiB
#include <bits/stdc++.h>

// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

using namespace std;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); // overclock random

typedef pair<int,int> pii;
typedef pair<long long, long long> pll;
typedef pair<double, double> pdd;

const int MAXN = 1e6+10;

int dy[MAXN];

signed main(){
    std::ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    // freopen("test.in", "r", stdin);
    // freopen("test.out", "w", stdout);
    // cout << fixed << setprecision(12);

    int n, d, m;
    cin >> n >> d >> m;

    vector<pii> sc;
    for (int i=1;i<=m;i++){
        cin >> dy[i];
        sc.push_back({dy[i], i});
    }
    sort(sc.begin(), sc.end());

    int in = 0, fi = 1e6, me;
    vector<int> ans;
    while (in<=fi){
        me = (in+fi)/2;

        int ct = 0, dt = 0;
        bool v = 1;
        vector<int> td;
        for (int i=1;i<=n;i++){
            while (ct<sc.size() && sc[ct].first == i) td.push_back(sc[ct++].second);

            for (int j=0;j<me;j++){
                if (dt < td.size()) dt++;
                else break;
            }

            if (dt < td.size() && dy[td[dt]]+d <= i){
                v = 0;
                break;
            }

        }

        if (v){
            fi = me-1;
            ans = td;
        }
        else in = me+1;

    }

    cout << fi+1 << "\n";
    int j = 0;
    for (int i=0;i<n;i++){
        for (int k=0;k<fi+1;k++) if (j < ans.size()) cout << ans[j++] << " ";
        cout << "0\n";
    }

    return 0;
}

Compilation message (stderr)

jobs.cpp: In function 'int main()':
jobs.cpp:45:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |             while (ct<sc.size() && sc[ct].first == i) td.push_back(sc[ct++].second);
      |                    ~~^~~~~~~~~~
jobs.cpp:48:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |                 if (dt < td.size()) dt++;
      |                     ~~~^~~~~~~~~~~
jobs.cpp:52:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |             if (dt < td.size() && dy[td[dt]]+d <= i){
      |                 ~~~^~~~~~~~~~~
jobs.cpp:70:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |         for (int k=0;k<fi+1;k++) if (j < ans.size()) cout << ans[j++] << " ";
      |                                      ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...