# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
470959 | XII | Job Scheduling (CEOI12_jobs) | C++17 | 475 ms | 13764 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define fi first
#define se second
#define mp make_pair
#define eb emplace_back
#define ALL(x) (x).begin(), (x).end()
#define FOR(i, a, b) for(int i = (a); i < (b); ++i)
#define FORU(i, a, b) for(int i = (a); i <= (b); ++i)
#define FORD(i, a, b) for(int i = (a); i >= (b); --i)
#define IOS cin.tie(0)->sync_with_stdio(false);
#define PROB "CEOI12_jobs"
void Fi(){
if(fopen(PROB".inp", "r")){
freopen(PROB".inp", "r", stdin);
freopen(PROB".out", "w", stdout);
}
}
int firstTrue(int lo, int hi, function<bool(int)> f){
while(lo < hi){
int mid = lo + (hi - lo) / 2;
if(f(mid)) hi = mid;
else lo = mid + 1;
}
return hi;
}
int main(){
IOS;
Fi();
int n, d, m; cin >> n >> d >> m;
vector<int> day(m);
for(int &x: day) cin >> x;
vector<int> pos(m); iota(ALL(pos), 0);
sort(ALL(pos), [&](const int &i, const int &j){
return day[i] < day[j];
}
);
const auto check = [&](const int &x) -> bool{
int i = 0;
FORU(T, 1, n) FOR(j, 0, x) if(i < m && day[pos[i]] <= T){
if(i < m && day[pos[i++]] + d < T) return false;
} else break;
return (i >= m);
};
int ans = firstTrue(m / n + (m % n ? 1 : 0), m, check);
cout << ans << "\n";
int i = 0;
FORU(T, 1, n){
FOR(j, 0, ans) if(i < m && day[pos[i]] <= T){
if(i < m) cout << pos[i++] + 1 << " ";
} else break;
cout << "0\n";
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |