# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
565515 | scc_c | Job Scheduling (CEOI12_jobs) | C++14 | 111 ms | 9920 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <sstream>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <iterator>
#include <utility>
#include <unordered_set>
#include <unordered_map>
#include <functional>
#include <queue>
#include <numeric>
#include <deque>
#define lli long long int
using namespace std;
/*
*/
int works(vector<int> a, int mach, int n, int m, int d){ //k groups, mid is the sum
int curday = 1, processing = 0;
for(int i = 0; i < m; i++){
if(a[i] >= d+curday) processing++; //if the deadline is almost up then put them as priority on the list
else if(a[i] <= curday && processing < mach) processing++;
if(processing > mach) return 0;
if(processing == mach || i == m || a[i+1] > curday){
curday++;
processing = 0;
}
}
if(processing > mach) return 0;
if(curday <= n) return 1;
return 0;
}
void printworks2(vector<int> a, map<int, int> amap, int mach, int n, int m, int d){ //k groups, mid is the sum
int curday = 1, processing = 0;
for(int i = 0; i < m; i++){
if(a[i] >= d+curday) cout << amap[a[i]] << " ";
else if(a[i] < curday && processing < mach) cout << amap[a[i]] << " ";
if(processing == mach || i == m || a[i+1] > curday){
cout << 0 << endl;
curday++;
processing = 0;
}
}
}
void printworks(vector<int> a, vector<pair<int, int> > amap, int mach, int n, int m, int d){ //k groups, mid is the sum
int curday = 1, processing = 0;
for(int i = 0; i < m; i++){
if(a[i] >= d+curday){
cout << amap[i].second << " ";//if the deadline is almost up then put them as priority on the list
processing++;
}
else if(a[i] <= curday && processing < mach){
cout << amap[i].second << " ";
processing++;
}
if(processing == mach || i == m || a[i+1] > curday){
curday++;
processing = 0;
cout << 0 << endl;
}
}
cout << 0 << endl;
}
int binsearch(vector<int> a, int l, int r, int n, int m, int d){ //l and r are values of r
if(l == r) return l;
if(r == l+1){
if(works(a, l, n, m, d)) return l;
return r;
}
int mid = (r+l)/2;
if(works(a, mid, n, m, d)) return binsearch(a, l, mid, n, m, d);
else return binsearch(a, mid+1, r, n, m, d);
}
int main(){
int n, d, m;
cin >> n >> d >> m;
vector<int> a(n);
vector<pair<int, int> > amap;
for(int i = 0; i < m; i++){
int x;
cin >> x;
a[i] = x;
amap.push_back(make_pair(a[i], i+1));
}
sort(a.begin(), a.end());
sort(amap.begin(), amap.end());
int ans = binsearch(a, 0, 1000001, n, m, d);
cout << ans << endl;
printworks(a, amap, ans, n, m, d);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |