#include <bits/stdc++.h>
using namespace std;
struct Process {
long long id;
int atime;
int btime;
int wtime;
int ttime;
int st_time;
int comp_time;
};
bool comparearrival(Process a, Process b) {
return a.atime < b.atime;
}
void calculatetimes(vector<Process>& process) {
int curr_time = 0;
for (auto& p : process) {
if (curr_time < p.atime)
curr_time = p.atime;
p.st_time = curr_time;
p.wtime = p.st_time - p.atime;
p.comp_time = p.st_time + p.btime;
p.ttime = p.comp_time - p.atime;
curr_time = p.comp_time;
}
}
void calculate_average(const vector<Process>& process) {
float total_waiting = 0, total_turnaround = 0;
for (const auto& p : process) {
total_waiting += p.wtime;
total_turnaround += p.ttime;
}
cout << fixed << setprecision(2);
cout << "\nAverage waiting time: " << total_waiting / process.size() << "\n";
cout << "Average turnaround time: " << total_turnaround / process.size();
}
int main() {
int n;
cout << "process: ";
cin >> n;
vector<Process> process(n);
for (int i = 0; i < n; ++i) {
process[i].id = i + 1;
cout << "Arrival time of Process " << i + 1 << ": ";
cin >> process[i].atime;
cout << "Burst time of Process " << i + 1 << ": ";
cin >> process[i].btime;
}
sort(process.begin(), process.end(), comparearrival);
cout << "\norder: ";
for (const auto& p : process)
cout << "P" << p.id << " ";
cout << "\n";
calculatetimes(process);
calculate_average(process);
return 0;
}