#include<bits/stdc++.h>
using namespace std;
void solvio(int p[], int n, int bt[], int wt[], int time_quantum)
{
int rem_bt[n];
for (int i = 0 ; i < n ; i++)
rem_bt[i] = bt[i];
int t = 0;
while (1)
{
bool ok = true;
for(int i=0; i<n; i++){
if(rem_bt[i] > 0){
ok = false;
if(rem_bt[i] > time_quantum){
t += time_quantum;
rem_bt[i] -= time_quantum;
}
else{
t += rem_bt[i];
wt[i] = t - bt[i];
rem_bt[i] = 0;
}
}
}
if(ok == true)
break;
}
}
void calculate_tat(int p[], int n, int bt[], int wt[], int tat[]){
for(int i=0; i<n ; i++)
tat[i] = bt[i] + wt[i];
}
void calculate_at(int p[], int n, int bt[], int time_quantum){
int wt[n],tat[n],total_tat = 0,total_wt = 0;
solvio(p, n, bt, wt, time_quantum);
calculate_tat(p, n, bt, wt, tat);
cout << "p "<< " Burst time "
<< " Waiting time " << " Turn around time\n";
for (int i=0; i<n; i++)
{
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
cout << " " << i+1 << "\t\t" << bt[i] <<"\t "
<< wt[i] <<"\t\t " << tat[i] <<endl;
}
cout << "Average waiting time = "<< (float)total_wt / (float)n;
cout << "\nAverage turn around time = "<< (float)total_tat / (float)n;
}
int time_quantum(int n, int b_t[]){
int sum = 0;
for(int i=0; i<n; i++){
sum += b_t[i];
}
float mean = (float)sum/n;
float median;
if(n % 2 == 0){
median = ((b_t[n/2]) + (b_t[n/2] + 1)) / 2;
}
else{
median = b_t[(n+1)/2];
}
float tq = sqrt(mean + median);
return tq;
}
int main(){
int p[]={ 1, 2, 3};
int n = sizeof p / sizeof p[0];
int b_t[] = {6, 3, 9};
int tq = time_quantum(n, b_t);
calculate_at(p, n, b_t, tq);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgc29sdmlvKGludCBwW10sIGludCBuLCBpbnQgYnRbXSwgaW50IHd0W10sIGludCB0aW1lX3F1YW50dW0pCnsKCWludCByZW1fYnRbbl07Cglmb3IgKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKQoJCXJlbV9idFtpXSA9IGJ0W2ldOwoJaW50IHQgPSAwOwoJd2hpbGUgKDEpCgl7CgkJYm9vbCBvayA9IHRydWU7CgkJZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKCQkJaWYocmVtX2J0W2ldID4gMCl7CgkJCQlvayA9IGZhbHNlOwoJCQkJaWYocmVtX2J0W2ldID4gdGltZV9xdWFudHVtKXsKICAgICAgICAgICAgICAgICAgICB0ICs9IHRpbWVfcXVhbnR1bTsKCQkJCQlyZW1fYnRbaV0gLT0gdGltZV9xdWFudHVtOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQl0ICs9IHJlbV9idFtpXTsKCQkJCQl3dFtpXSA9IHQgLSBidFtpXTsKCQkJCQlyZW1fYnRbaV0gPSAwOwoJCQkJfQoJCQl9CgkJfQoJCWlmKG9rID09IHRydWUpCgkJYnJlYWs7Cgl9Cn0KCnZvaWQgY2FsY3VsYXRlX3RhdChpbnQgcFtdLCBpbnQgbiwgaW50IGJ0W10sIGludCB3dFtdLCBpbnQgdGF0W10pewoKCWZvcihpbnQgaT0wOyBpPG4gOyBpKyspCgkJdGF0W2ldID0gYnRbaV0gKyB3dFtpXTsKfQp2b2lkIGNhbGN1bGF0ZV9hdChpbnQgcFtdLCBpbnQgbiwgaW50IGJ0W10sIGludCB0aW1lX3F1YW50dW0pewoJaW50IHd0W25dLHRhdFtuXSx0b3RhbF90YXQgPSAwLHRvdGFsX3d0ID0gMDsKCglzb2x2aW8ocCwgbiwgYnQsIHd0LCB0aW1lX3F1YW50dW0pOwoKCWNhbGN1bGF0ZV90YXQocCwgbiwgYnQsIHd0LCB0YXQpOwoJY291dCA8PCAicCAiPDwgIiBCdXJzdCB0aW1lICIKCQk8PCAiIFdhaXRpbmcgdGltZSAiIDw8ICIgVHVybiBhcm91bmQgdGltZVxuIjsKCWZvciAoaW50IGk9MDsgaTxuOyBpKyspCgl7CgkJdG90YWxfd3QgPSB0b3RhbF93dCArIHd0W2ldOwoJCXRvdGFsX3RhdCA9IHRvdGFsX3RhdCArIHRhdFtpXTsKCQljb3V0IDw8ICIgIiA8PCBpKzEgPDwgIlx0XHQiIDw8IGJ0W2ldIDw8Ilx0ICIKCQkJPDwgd3RbaV0gPDwiXHRcdCAiIDw8IHRhdFtpXSA8PGVuZGw7Cgl9Cgljb3V0IDw8ICJBdmVyYWdlIHdhaXRpbmcgdGltZSA9ICI8PCAoZmxvYXQpdG90YWxfd3QgLyAoZmxvYXQpbjsKCWNvdXQgPDwgIlxuQXZlcmFnZSB0dXJuIGFyb3VuZCB0aW1lID0gIjw8IChmbG9hdCl0b3RhbF90YXQgLyAoZmxvYXQpbjsKfQoKaW50IHRpbWVfcXVhbnR1bShpbnQgbiwgaW50IGJfdFtdKXsKICAgIGludCBzdW0gPSAwOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBzdW0gKz0gYl90W2ldOwogICAgfQogICAgZmxvYXQgbWVhbiA9IChmbG9hdClzdW0vbjsKICAgIGZsb2F0IG1lZGlhbjsKICAgIGlmKG4gJSAyID09IDApewogICAgICAgIG1lZGlhbiA9ICgoYl90W24vMl0pICsgKGJfdFtuLzJdICsgMSkpIC8gMjsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgbWVkaWFuID0gYl90WyhuKzEpLzJdOwogICAgfQogICAgZmxvYXQgdHEgPSBzcXJ0KG1lYW4gKyBtZWRpYW4pOwogICAgcmV0dXJuIHRxOwp9CgppbnQgbWFpbigpewoJaW50IHBbXT17IDEsIDIsIDN9OwoJaW50IG4gPSBzaXplb2YgcCAvIHNpemVvZiBwWzBdOwoJaW50IGJfdFtdID0gezYsIDMsIDl9OwoJaW50IHRxID0gdGltZV9xdWFudHVtKG4sIGJfdCk7CgljYWxjdWxhdGVfYXQocCwgbiwgYl90LCB0cSk7CglyZXR1cm4gMDsKfQoK