# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
565519 | scc_c | Job Scheduling (CEOI12_jobs) | C++14 | 374 ms | 65536 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 <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;
/*
8 2 12
1 2 4 2 1 3 5 6 2 3 6 4
*/
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] < curday-d) return 0;
if(a[i] == curday-d) 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 || i == m-1 || a[i+1] > curday){
curday++;
processing = 0;
}
}
if(processing > mach) return 0;
if(curday > n) return 0;
return 1;
}
void printworks2(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;
}
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] == curday-d){
cout << amap[i].second << " ";
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;
}
}
for(int i = curday; i < n+1; i++) 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(m);
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... |