fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // class priority
  5. class priority
  6. {
  7. public:
  8. string name;
  9. int burst;
  10. int prio;
  11. int arvt;
  12. int waiting;
  13.  
  14. // constructor use
  15. priority()
  16. {
  17. cin >> name >> burst >> prio >> arvt;
  18. }
  19.  
  20. // show process burst priority arival time
  21. void show()
  22. {
  23. cout << name << " " << burst << " " << prio << " " << arvt << endl;
  24. }
  25. };
  26.  
  27. int main()
  28. {
  29. int n;
  30. cin >> n;
  31.  
  32. vector<priority> a(n);
  33.  
  34. // sorting Arrival Time
  35.  
  36. for (int i = 0; i < n; i++)
  37. {
  38. for (int j = i + 1; j < n; j++)
  39. {
  40. if (a[j].arvt < a[i].arvt)
  41. swap(a[i], a[j]);
  42. }
  43. }
  44.  
  45. vector<string> pp;
  46.  
  47. vector<priority> p;
  48.  
  49. for (int i = 0; i < n; i++)
  50. {
  51. p.push_back(a[i]);
  52.  
  53. int n2 = p.size();
  54.  
  55. for (int i = 0; i < n2 - 1; i++)
  56. {
  57. for (int j = i + 1; j < n2; j++)
  58. {
  59. if (p[j].prio < p[i].prio)
  60. swap(p[i], p[j]);
  61. }
  62. }
  63.  
  64. pp.push_back(p[0].name);
  65.  
  66. p[0].burst--;
  67. if (p[0].burst == 0)
  68. p.erase(p.begin() + 0);
  69. }
  70.  
  71. // non-preemptive
  72.  
  73. while (!p.empty())
  74. {
  75.  
  76. int n2 = p.size();
  77.  
  78. pp.push_back(p[0].name);
  79.  
  80. p[0].burst--;
  81.  
  82. if (p[0].burst == 0)
  83.  
  84. p.erase(p.begin() + 0);
  85. }
  86.  
  87. for (int i = 0; i < pp.size(); i++)
  88. {
  89. cout << pp[i] << " ";
  90. }
  91.  
  92. cout << endl
  93. << endl
  94. << "Waiting Times : " << endl;
  95.  
  96. // finding waiting times for each process
  97.  
  98. for (int i = 0; i < n; i++)
  99. {
  100. int ct = 0;
  101. for (int j = 0; j < pp.size(); j++)
  102. {
  103. if (a[i].name == pp[j])
  104. ct = j + 1;
  105. }
  106.  
  107. a[i].waiting = ct - (a[i].arvt + a[i].burst);
  108. }
  109.  
  110. // Calculating Avg. Waiting Times
  111.  
  112. float wt = 0;
  113.  
  114. for (int i = 0; i < n; i++)
  115. {
  116. cout << a[i].name << " " << a[i].waiting << endl;
  117. wt += 1.0 * a[i].waiting;
  118. }
  119. cout << endl;
  120. cout << "Avg. Waitimg Time = " << wt / n << endl;
  121.  
  122. return 0;
  123. }
Success #stdin #stdout 0.01s 5288KB
stdin
6
p1  10  2   1
p2  1   4   0
p3  2   1   3
p4  1   3   2
p5  5   5   3
p6  4   6   5
stdout
p2 p1 p1 p3 p3 p1 p1 p1 p1 p1 p1 p1 p1 p4 p5 p5 p5 p5 p5 p6 p6 p6 p6 

Waiting Times : 
p2 0
p1 2
p4 11
p3 0
p5 11
p6 14

Avg. Waitimg Time = 6.33333