#include<bits/stdc++.h>
using namespace std;
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 ] ;
}
int tq = sqrt ( mean + median) ;
return tq;
}
void calculate_wt( int p[ ] , int n, int b_t[ ] , int wt[ ] , int quantum) {
int rem_b_t[ n] ;
for ( int i = 0 ; i < n ; i++ )
rem_b_t[ i] = b_t[ i] ;
int t = 0 ;
while ( true ) {
bool ok = true ;
for ( int i = 0 ; i < n; i++ ) {
if ( rem_b_t[ i] > 0 ) {
ok = false ;
if ( rem_b_t[ i] > quantum) {
t + = quantum;
rem_b_t[ i] - = quantum;
}
else {
t + = rem_b_t[ i] ;
wt[ i] = t - b_t[ i] ;
rem_b_t[ i] = 0 ;
}
}
}
if ( ok == true )
break ;
}
}
void calculate_tat( int p[ ] , int n, int b_t[ ] , int wt[ ] , int tat[ ] ) {
for ( int i = 0 ; i < n ; i++ )
tat[ i] = b_t[ i] + wt[ i] ;
}
void solvio( int p[ ] , int n, int b_t[ ] , int quantum) {
int wt[ n] , tat[ n] , total_wt = 0 , total_tat = 0 ;
calculate_wt( p, n, b_t, wt, quantum) ;
calculate_tat( p, n, b_t, wt, tat) ;
cout << "PN\t " << " \t b_t " << " WT " << " \t TAT\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 " << b_t[ i] << "\t " << wt[ i] << "\t \t " << tat[ i] << endl;
}
cout << "Average waiting time = " << ( float ) total_wt/ ( float ) n << endl;
cout << "Average turn around time = " << ( float ) total_tat/ ( float ) n << endl;
}
int main( ) {
int n;
cout << "Enter the number of p : " ;
cin >> n;
int p[ n] , a[ n] , b[ n] ;
cout << "Enter the p name arrival time and burst time of the p : " << endl;
for ( int i= 0 ; i< n; i++ ) {
cin >> p[ i] >> a[ i] >> b[ i] ;
}
int tq = time_quantum( n, b) ;
solvio( p, n, b, tq) ;
return 0 ;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCB0aW1lX3F1YW50dW0oaW50IG4sIGludCBiX3RbXSl7CiAgICBpbnQgc3VtID0gMDsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgc3VtICs9IGJfdFtpXTsKICAgIH0KICAgIGZsb2F0IG1lYW4gPSAoZmxvYXQpc3VtL247CiAgICBmbG9hdCBtZWRpYW47CiAgICBpZihuICUgMiA9PSAwKXsKICAgICAgICBtZWRpYW4gPSAoKGJfdFtuLzJdKSArIChiX3Rbbi8yXSArIDEpKSAvIDI7CiAgICB9CiAgICBlbHNlewogICAgICAgIG1lZGlhbiA9IGJfdFsobisxKS8yXTsKICAgIH0KICAgIGludCB0cSA9IHNxcnQobWVhbiArIG1lZGlhbik7CiAgICByZXR1cm4gdHE7Cn0Kdm9pZCBjYWxjdWxhdGVfd3QoaW50IHBbXSwgaW50IG4sIGludCBiX3RbXSwgaW50IHd0W10sIGludCBxdWFudHVtKXsKCWludCByZW1fYl90W25dOwoJZm9yIChpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKykKCQlyZW1fYl90W2ldID0gYl90W2ldOwoKCWludCB0ID0gMDsKCXdoaWxlKHRydWUpewogICAgICAgIGJvb2wgb2sgPSB0cnVlOwoJCWZvcihpbnQgaSA9IDAgOyBpIDwgbjsgaSsrKXsKCQkJaWYocmVtX2JfdFtpXSA+IDApewoJCQkJb2sgPSBmYWxzZTsKCQkJCWlmKHJlbV9iX3RbaV0gPiBxdWFudHVtKXsKCQkJCQl0ICs9IHF1YW50dW07CgkJCQkJcmVtX2JfdFtpXSAtPSBxdWFudHVtOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQl0ICs9IHJlbV9iX3RbaV07CgkJCQkJd3RbaV0gPSB0IC0gYl90W2ldOwoJCQkJCXJlbV9iX3RbaV0gPSAwOwoJCQkJfQoJCQl9CgkJfQoJCWlmKG9rID09IHRydWUpCgkJYnJlYWs7Cgl9Cn0KCnZvaWQgY2FsY3VsYXRlX3RhdChpbnQgcFtdLCBpbnQgbiwgaW50IGJfdFtdLCBpbnQgd3RbXSwgaW50IHRhdFtdKXsKCglmb3IoaW50IGkgPSAwOyBpIDwgbiA7IGkrKykKCQl0YXRbaV0gPSBiX3RbaV0gKyB3dFtpXTsKfQoKdm9pZCBzb2x2aW8oaW50IHBbXSwgaW50IG4sIGludCBiX3RbXSwgaW50IHF1YW50dW0pewoJaW50IHd0W25dLCB0YXRbbl0sIHRvdGFsX3d0ID0gMCwgdG90YWxfdGF0ID0gMDsKCWNhbGN1bGF0ZV93dChwLCBuLCBiX3QsIHd0LCBxdWFudHVtKTsKCWNhbGN1bGF0ZV90YXQocCwgbiwgYl90LCB3dCwgdGF0KTsKCWNvdXQgPDwgIlBOXHQgIjw8ICIgXHRiX3QgIiA8PCAiIFdUICIgPDwgIiBcdFRBVFxuIjsKCWZvcihpbnQgaT0wOyBpPG47IGkrKyl7CgkJdG90YWxfd3QgPSB0b3RhbF93dCArIHd0W2ldOwoJCXRvdGFsX3RhdCA9IHRvdGFsX3RhdCArIHRhdFtpXTsKCQljb3V0IDw8ICIgIiA8PCBpKzEgPDwgIlx0XHQiIDw8IGJfdFtpXSA8PCJcdCAiIDw8IHd0W2ldIDw8Ilx0XHQgIiA8PCB0YXRbaV0gPDxlbmRsOwoJfQoJY291dCA8PCAiQXZlcmFnZSB3YWl0aW5nIHRpbWUgPSAiIDw8IChmbG9hdCl0b3RhbF93dC8oZmxvYXQpbiA8PCBlbmRsOwoJY291dCA8PCAiQXZlcmFnZSB0dXJuIGFyb3VuZCB0aW1lID0gIiA8PCAoZmxvYXQpdG90YWxfdGF0LyhmbG9hdCluIDw8IGVuZGw7Cn0KCmludCBtYWluKCl7CiAgICBpbnQgbjsKICAgIGNvdXQgPDwgIkVudGVyIHRoZSBudW1iZXIgb2YgcCA6ICI7CiAgICBjaW4gPj4gbjsKICAgIGludCBwW25dLCBhW25dLCBiW25dOwogICAgY291dCA8PCAiRW50ZXIgdGhlIHAgbmFtZSBhcnJpdmFsIHRpbWUgYW5kIGJ1cnN0IHRpbWUgb2YgdGhlIHAgOiAiIDw8IGVuZGw7CiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspewogICAgICAgIGNpbiA+PiBwW2ldID4+IGFbaV0gPj4gYltpXTsKICAgIH0KICAgIGludCB0cSA9IHRpbWVfcXVhbnR1bShuLCBiKTsKICAgIHNvbHZpbyhwLCBuLCBiLCB0cSk7CiAgICByZXR1cm4gMDsKfQo=