#include<iostream>
#include<iomanip>
using namespace std;
void roundRobin(int len,string p[], int a[],int b[], int n)
{
int res = 0;
int resc = 0;
string seq;
int res_b[len];
int res_a[len];
for (int i = 0; i < len; i++)
{
res_b[i] = b[i];
res_a[i] = a[i];
}
int t = 0;
int w[len];
int comp[len];
while (true) {
bool flag = true;
for (int i = 0; i <len; i++)
{
if (res_a[i] <= t)
{
if (res_a[i] <= n)
{
if (res_b[i] > 0)
{
flag = false;
if (res_b[i] > n)
{
t = t + n;
res_b[i] = res_b[i] - n;
res_a[i] = res_a[i] + n;
seq += "->" + p[i];
}
else
{
t = t + res_b[i];
comp[i] = t - a[i];
w[i] = t - b[i] - a[i];
res_b[i] = 0;
seq += "->" + p[i];
}
}
}
else if (res_a[i] > n)
{
for (int j = 0; j <len; j++)
{
if (res_a[j] < res_a[i])
{
if (res_b[j] > 0)
{
flag = false;
if (res_b[j] > n)
{
t = t + n;
res_b[j] = res_b[j] - n;
res_a[j] = res_a[j] + n;
seq += "->" + p[j];
}
else {
t = t + res_b[j];
comp[j] = t - a[j];
w[j] = t - b[j] - a[j];
res_b[j] = 0;
seq += "->" + p[j];
}
}
}
}
if (res_b[i] > 0)
{
flag = false;
if (res_b[i] > n)
{
t = t + n;
res_b[i] = res_b[i] - n;
res_a[i] = res_a[i] + n;
seq += "->" + p[i];
}
else
{
t = t + res_b[i];
comp[i] = t - a[i];
w[i] = t - b[i] - a[i];
res_b[i] = 0;
seq += "->" + p[i];
}
}
}
}
else if (res_a[i] > t)
{
t++;
i--;
}
}
if (flag) {
break;
}
}
cout<<"Waiting Time";
for (int i = 0; i < len; i++) {
cout<<"\nTime Taken for "<<p[i]<<"="<<w[i];
res = res + w[i];
resc = resc + comp[i];
}
cout<<fixed;
cout<<"\nAverage Waiting Time="<< (float)res / len;
cout<<"\nTurnAround Time";
for (int i = 0; i < len; i++) {
cout<<"\nTime Taken for "<<p[i]<<"="<<comp[i];
}
cout<<"\nAverage TurnAround Time="<< (float)resc / len;
}
int main()
{ int n ;
cin>>n;
int processes[n],arrivaltime[n];
string name[n];
int bursttime[n];
int q ;
for(int i=0;i<n;i++)
{
cin>>name[i];
}
for(int i=0;i<n;i++)
{
cin>>bursttime[i];
processes[i]=i;
}
for(int i=0;i<n;i++)
{
cin>>arrivaltime[i];
}
cin>>q;
roundRobin(n,name, arrivaltime, bursttime, q);
return 0;
}
// code by lakshay singhwal
