#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
using namespace std;
using ll = long long;
const int inf = 2e18 + 31, mod = 1e9 + 7, MX = 1e5 + 1;
const double eps = 1e-8;
int gcd(int a, int b){
return b ? gcd(b, a%b) : a;
}
int lcm(int a, int b){
return a/gcd(a, b)*b;
}
void solve(){
/*
8 2 12
1 2 4 2 1 3 5 6 2 3 6 4
*/
int n, d, m;
cin >> n >> d >> m;
vector<pair<int,int>> job(m);
for(int day, i = 0; i < m; i++){
cin >> day;
job[i].first = day;
job[i].second = i + 1;
}
sort(all(job));
vector<vector<int>> schedule;
int l = 1, r = m, mid;
function<bool(int)> check = [&](int num){
int pos = 0;
for(int day = 1; day <= n; day++){
for(int j = 0; j < num && pos < m && job[pos].first <= day; j++){
if(day - job[pos].first > d)
return false;
pos++;
}
}
if(pos == m) {
pos = 0;
schedule.assign(n + 1, vector<int>(0));
for(int day = 1; day <= n; day++){
for(int j = 0; j < num && pos < m && job[pos].first <= day; j++){
schedule[day].push_back(job[pos++].second);
}
}
return true;
}
return false;
};
while(l < r){
mid = l + (r - l)/2;
if(check(mid))
r = mid;
else
l = mid + 1;
}
cout << l << endl;
for(int day = 1; day <= n; day++){
for(auto job_id : schedule[day])
cout << job_id << ' ';
cout << "0\n";
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt = 1;
//cin >> tt;
while(tt --){
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |