#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(){
/*
*/
int n, m, d;
cin >> n >> d >> m;
vector<vector<int>> schedule(n + 1, vector<int>());
for(int i = 1, x; i <= m; i++) {
cin >> x;
schedule[x].push_back(i);
}
int l = 1, r = m, mid;
function<bool(int)> check = [&](int num){
queue<pair<int,int>> q;
vector<vector<int>> tsch = schedule;
for(int day = 1; day <= n; day++) {
for(auto x : tsch[day]) {
q.push(make_pair(x, day));
}
tsch[day].clear();
pair<int,int> p;
for(int i = 0; i < num && !q.empty(); i++){
p = q.front();
q.pop();
if(day - p.second > d)
return false;
tsch[day].push_back(p.first);
}
}
if (q.size() == 0)
schedule = tsch;
return q.size() == 0;
};
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 x : schedule[day])
cout << x << ' ';
cout << 0 << endl;
}
}
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... |