# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1004324 | u_suck_o | Job Scheduling (CEOI12_jobs) | C++17 | 315 ms | 37200 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
#define MAXN 100005
using namespace std;
int n, d, m;
vector<int> tasks[MAXN];
int main() {
cin >> n >> d >> m;
for (int i = 1; i <= m; i++) {
int x; cin >> x;
tasks[x].push_back(i);
}
//binary search on answer
int l = 1, r = m;
while (l < r) {
int mid = (l+r)/2;
//if (mid == 2) cout << "hi";
queue<pair<int, int>> q;
bool valid = true;
for (int i = 1; i <= n; i++) {
for (int j : tasks[i])
q.push({j, i});
for (int j = 1; j <= mid; j++) {
if (!q.empty()) {
auto p = q.front(); q.pop();
if (i - p.second > d) {
valid = false;
break;
}
} else
break;
}
if (!valid)
break;
}
if (!q.empty())
valid = false;
if (valid)
r = mid;
else
l = mid+1;
}
cout << r << "\n";
//make assignments
queue<pair<int, int>> q;
vector<int> v[n];
for (int i = 1; i <= n; i++) {
for (int j : tasks[i])
q.push({j, i});
for (int j = 1; j <= r; j++) {
if (!q.empty()) {
v[i].push_back(q.front().first);
q.pop();
}
else
break;
}
}
for (int i = 1; i <= n; i++) {
for (int j : v[i])
cout << j << " ";
cout << "0\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |