#include <bits/stdc++.h>
using namespace std;
class Process {
public :
int id, at, bt, st, ft, wt, tat;
Process( int id, int at, int bt) : id( id) , at( at) , bt( bt) { }
Process( ) { }
void calculateTimes( int current_time) {
st = max( current_time, at) ;
ft = st + bt;
wt = st - at;
tat = wt + bt;
}
} ;
bool compareArrivalTime( const Process& a, const Process& b) {
return a.at < b.at ;
}
int main( ) {
int n;
cout << "Enter the number of processes: " ;
cin >> n;
vector< Process> processes;
for ( int i = 0 ; i < n; ++ i) {
int bt, at;
cout << "Enter the burst time of P" << i + 1 << ": " ;
cin >> bt;
cout << "Enter the arrival time of P" << i + 1 << ": " ;
cin >> at;
processes.push_back ( Process( i + 1 , at, bt) ) ;
}
sort( processes.begin ( ) , processes.end ( ) , compareArrivalTime) ;
int current_time = 0 ;
float total_wt = 0 , total_tat = 0 ;
cout << "Gantt Chart\n " ;
for ( int i = 0 ; i < n; ++ i) {
cout << current_time << " P" << processes[ i] .id << " " ;
processes[ i] .calculateTimes ( current_time) ;
current_time = processes[ i] .ft ;
total_wt + = processes[ i] .wt ;
total_tat + = processes[ i] .tat ;
}
cout << endl;
cout << "Process: Start time: Waiting time: Turnaround time:\n " ;
for ( int i = 0 ; i < n; ++ i) {
cout << "P" << processes[ i] .id << "\t " << processes[ i] .st << "\t " << processes[ i] .wt << "\t " << processes[ i] .tat << endl;
}
cout << "Average waiting time: " << total_wt / n << endl;
cout << "Average turnaround time: " << total_tat / n << endl;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBQcm9jZXNzIHsKcHVibGljOgogICAgaW50IGlkLCBhdCwgYnQsIHN0LCBmdCwgd3QsIHRhdDsKICAgIFByb2Nlc3MoaW50IGlkLCBpbnQgYXQsIGludCBidCkgOiBpZChpZCksIGF0KGF0KSwgYnQoYnQpIHt9CiAgICBQcm9jZXNzKCkge30KCiAgICB2b2lkIGNhbGN1bGF0ZVRpbWVzKGludCBjdXJyZW50X3RpbWUpIHsKICAgICAgICBzdCA9IG1heChjdXJyZW50X3RpbWUsIGF0KTsKICAgICAgICBmdCA9IHN0ICsgYnQ7CiAgICAgICAgd3QgPSBzdCAtIGF0OwogICAgICAgIHRhdCA9IHd0ICsgYnQ7CiAgICB9Cn07Cgpib29sIGNvbXBhcmVBcnJpdmFsVGltZShjb25zdCBQcm9jZXNzJiBhLCBjb25zdCBQcm9jZXNzJiBiKSB7CiAgICByZXR1cm4gYS5hdCA8IGIuYXQ7Cn0KCmludCBtYWluKCkgewogICAgaW50IG47CiAgICBjb3V0IDw8ICJFbnRlciB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlczogIjsKICAgIGNpbiA+PiBuOwoKICAgIHZlY3RvcjxQcm9jZXNzPiBwcm9jZXNzZXM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGludCBidCwgYXQ7CiAgICAgICAgY291dCA8PCAiRW50ZXIgdGhlIGJ1cnN0IHRpbWUgb2YgUCIgPDwgaSArIDEgPDwgIjogIjsKICAgICAgICBjaW4gPj4gYnQ7CiAgICAgICAgY291dCA8PCAiRW50ZXIgdGhlIGFycml2YWwgdGltZSBvZiBQIiA8PCBpICsgMSA8PCAiOiAiOwogICAgICAgIGNpbiA+PiBhdDsKICAgICAgICBwcm9jZXNzZXMucHVzaF9iYWNrKFByb2Nlc3MoaSArIDEsIGF0LCBidCkpOwogICAgfQoKICAgIHNvcnQocHJvY2Vzc2VzLmJlZ2luKCksIHByb2Nlc3Nlcy5lbmQoKSwgY29tcGFyZUFycml2YWxUaW1lKTsKCiAgICBpbnQgY3VycmVudF90aW1lID0gMDsKICAgIGZsb2F0IHRvdGFsX3d0ID0gMCwgdG90YWxfdGF0ID0gMDsKCiAgICBjb3V0IDw8ICJHYW50dCBDaGFydFxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY291dCA8PCBjdXJyZW50X3RpbWUgPDwgIiBQIiA8PCBwcm9jZXNzZXNbaV0uaWQgPDwgIiAiOwogICAgICAgIHByb2Nlc3Nlc1tpXS5jYWxjdWxhdGVUaW1lcyhjdXJyZW50X3RpbWUpOwogICAgICAgIGN1cnJlbnRfdGltZSA9IHByb2Nlc3Nlc1tpXS5mdDsKICAgICAgICB0b3RhbF93dCArPSBwcm9jZXNzZXNbaV0ud3Q7CiAgICAgICAgdG90YWxfdGF0ICs9IHByb2Nlc3Nlc1tpXS50YXQ7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7CgogICAgY291dCA8PCAiUHJvY2VzczogU3RhcnQgdGltZTogV2FpdGluZyB0aW1lOiBUdXJuYXJvdW5kIHRpbWU6XG4iOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBjb3V0IDw8ICJQIiA8PCBwcm9jZXNzZXNbaV0uaWQgPDwgIlx0IiA8PCBwcm9jZXNzZXNbaV0uc3QgPDwgIlx0IiA8PCBwcm9jZXNzZXNbaV0ud3QgPDwgIlx0IiA8PCBwcm9jZXNzZXNbaV0udGF0IDw8IGVuZGw7CiAgICB9CgogICAgY291dCA8PCAiQXZlcmFnZSB3YWl0aW5nIHRpbWU6ICIgPDwgdG90YWxfd3QgLyBuIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJBdmVyYWdlIHR1cm5hcm91bmQgdGltZTogIiA8PCB0b3RhbF90YXQgLyBuIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K