# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
537123 | mgl_diamond | Job Scheduling (CEOI12_jobs) | C++17 | 44 ms | 65536 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for(int i=l; i<=r; ++i)
#define fod(i, l, r) for(int i=r; i>=l; --i)
#define ll long long
#define ii pair<ll, ll>
#define fi first
#define se second
template<class T> bool umax(T &a, T b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool umin(T &a, T b) { if (a>b) { a=b; return 1; } return 0; }
void setIO(string name) {
ios_base::sync_with_stdio(0); cin.tie(0);
freopen((name+".in").c_str(),"r",stdin);
freopen((name+".out").c_str(),"w",stdout);
}
const double oo=1e18;
const int N=2000100;
int n, d, m;
vector<ii> stX(N);
vector<int> ans[N];
bool f(int x) {
for(int day=1, j=1; day<=m && j<=n; ++day)
for(int rb=min(n, j+x-1); j<=rb; ++j)
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 rb=min(n, j+x-1); j<=rb; ++j)
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=0, 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";
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |