제출 #1320778

#제출 시각아이디문제언어결과실행 시간메모리
1320778hyyhJob Scheduling (CEOI12_jobs)C++20
100 / 100
286 ms13980 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <stdio.h>
#include <unordered_map>
#include <bitset>
#include <tuple>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define endl '\n'
#define f first
#define s second

int n,m,k;

vector<pii> vc;

bool check(int ans){
    int day = 0;int cur = 0;
    for(auto [k,ind]:vc){
        if(k > day) day = k, cur = 0;
        cur++;
        if(day-m > k) return false;
        if(cur == ans) cur = 0, day++;
    }
    return true;
}

int main(){
    cin >> n >> m >> k;
    for(int i{1};i <= k;i++){
        int g;cin >> g;
        vc.emplace_back(g,i);
    }
    sort(vc.begin(),vc.end());
    int l = 1;
    int r = k;
    int ans = 1e9;
    while(l <= r){
        int md = l+(r-l)/2;
        if(check(md)){
            ans = min(ans,md);
            r = md-1;
        }
        else l = md+1;
    }
    cout << ans << endl;
    int ind = 0;
    for(int i{};i < n;i++){
        for(int j{};j < ans;j++){
            if(ind < k && vc[ind].f <= i+1) cout << vc[ind].s << " ",ind++;
            else break;
        }
        cout << 0 << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...