# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
553187 | dyc123 | Job Scheduling (CEOI12_jobs) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
#define ii pair<ll, ll>
#define ll long long
#define fi first
#define se second
int n, d, m;
vector<ii> stX(1000001);
vector<int> ans[100001];
bool f(int x) {
for(int day=1, j=1; day<=m && j<=n; ++day)
for(int i=1; i<=x && j<=n && stX[j].fi<=day; ++i)
if (day>stX[j++].fi+d)
return 0;
return 1;
}
void trace(int x) {
for(int day=1, j=1; day<=m && j<=n; ++day)
for(int i=1; i<=x && j<=n && stX[j].fi<=day; ++i)
ans[day].push_back(stX[j++].se);
}
int main() {
cin.tie(0) -> sync_with_stdio(0);
cout.tie(0);
cin >> m >> d >> n;
for(int i=1; i<=n; ++i) {
cin >> stX[i].fi;
stX[i].se=i;
}
sort(stX.begin()+1, stX.begin()+n+1);
int lb=1, rb=n+1, mb;
while (lb<rb) {
mb=(lb+rb)>>1;
if (f(mb))
rb=mb;
else
lb=mb+1;
}
trace(lb);
cout << lb << '\n';
for(int i=1; i<=m; ++i) {
for(int j: ans[i])
cout << j << ' ';
cout << "0\n";
}
}