Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define tii tuple<int, int, int>
- #define mt make_tuple
- int n, id, at, bt, min_i, currt; // n: no of processes
- using namespace std;
- void shortestjobfirst(vector<tii> processes){
- priority_queue<tii, vector<tii>, greater<tii> > wait_pq;
- currt = get<1>(processes[0]);
- get<1>(processes[0]) = -1;
- wait_pq.push(processes[0]);
- while(!wait_pq.empty()){
- currt += get<0>(wait_pq.top());
- cout<<"id: "<<get<2>(wait_pq.top())<<endl;
- wait_pq.pop();
- for(int i=0; i<processes.size(); ++i)
- if(get<1>(processes[i]) <= currt && get<1>(processes[i]) != -1){
- wait_pq.push(processes[i]);
- get<1>(processes[i]) = -1;
- }
- }
- }
- int main(){
- ios_base::sync_with_stdio(false);
- cin>>n;
- vector<tii> processes(n);
- for(int i=0; i<n; ++i){
- cin>>id>>at>>bt;
- processes[i] = mt(bt, at, id);
- }
- // sort with arrival time
- for(int i=0; i<n; ++i){
- min_i = i;
- for(int j=i+1; j<n; ++j){
- if(get<1>(processes[j]) < get<1>(processes[i]))
- min_i = j;
- }
- if(min_i == i)
- continue;
- tii t = processes[i];
- processes[i] = processes[min_i];
- processes[min_i] = t;
- }
- shortestjobfirst(processes);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement