# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
565515 | scc_c | Job Scheduling (CEOI12_jobs) | C++14 | 111 ms | 9920 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;
/*
*/
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... |