Advertisement
kruall

OS

Mar 30th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4.  
  5. #include <vector>
  6. #include <stack>
  7. #include <queue>
  8. #include <list>
  9. #include <set>
  10. #include <map>
  11.  
  12. #include <algorithm>
  13. #include <cmath>
  14.  
  15. #include <cstring>
  16. #include <string>
  17.  
  18. int main() {
  19. using namespace std;
  20.  
  21. std::ios::sync_with_stdio(false);
  22. cin.tie(0); cout.tie(0);
  23.  
  24. const int inf = (int)2e9;
  25.  
  26. int n, a, b,c, sum = 0;
  27. n = 3;// cin >> n;
  28. priority_queue<tuple<int, int,int>> systems, simples;
  29. vector<tuple<int, int, int, int>> tasks;
  30. for (int i = 0; i < n; ++i) {
  31. cin >> a >> b >> c;
  32. if (c == 0)
  33. simples.push({ -a ,i + 1,b });
  34. else
  35. systems.push({ -a , i + 1,b });
  36. tasks.push_back({ a, i + 1, b, c});
  37. sum += b;
  38. }
  39. sort(tasks.begin(), tasks.end());
  40. int tcur = 0;
  41. vector<pair<int, int>> ans;
  42. cout << "fifs: ";
  43. while (! systems.empty() || ! simples.empty()) {
  44. int tsy = -(systems.empty() ? -inf : get<0>(systems.top()));
  45. int tsi = -(simples.empty() ? -inf : get<0>(simples.top()));
  46. if (tcur >= tsy) {
  47. int start, idproc, cnt;
  48. tie(start, idproc, cnt) = systems.top();
  49. start *= -1;
  50. systems.pop();
  51. ans.push_back({ idproc, cnt });
  52. tcur += cnt;
  53. continue;
  54. }
  55. if (! simples.empty()) {
  56. int start, idproc, cnt;
  57. tie(start, idproc, cnt) = simples.top();
  58. start *= -1;
  59. simples.pop();
  60. int dt = min(cnt, tsy - tcur);
  61. cnt -= dt;
  62. tcur += dt;
  63. ans.push_back({ idproc, dt });
  64. if (cnt != 0) simples.push({ start, idproc, cnt });
  65. }
  66. if (!systems.empty()) {
  67. int start, idproc, cnt;
  68. tie(start, idproc, cnt) = systems.top();
  69. start *= -1;
  70. systems.pop();
  71. ans.push_back({ idproc, cnt });
  72. tcur += cnt;
  73. }
  74. }
  75.  
  76. for(auto & x : ans) {
  77. for (int i = 0; i < x.second; ++i)
  78. cout << x.first << ' ';
  79. }
  80. cout << endl;
  81.  
  82. cout << "rr1: ";
  83. auto tsks = tasks;
  84. bool run = true;
  85. int del = 2;
  86. while (run) {
  87. run = false;
  88. for (auto & x : tsks) {
  89. int start, idproc, cnt, prior;
  90. tie(start, idproc, cnt, prior) = x;
  91. if (cnt == 0) continue;
  92. run = true;
  93. for (int i = 0; i < del; ++i) {
  94. if (cnt > 0) cout << idproc << ' ';
  95. else cout << "_ ";
  96. if (cnt > 0) cnt--;
  97. }
  98. x = { start, idproc, cnt, prior };
  99. }
  100. }
  101. cout << endl;
  102.  
  103. cout << "rr2: ";
  104. auto tsks2 = tasks;
  105. int ind = 0;
  106. queue<pair<int, int >> que;
  107. for (int i = 0; i < inf; ++i) {
  108. if (ind < 3 && get<0>(tsks2[ind]) == i)
  109. que.push({ get<1>(tsks2[ind]), get<2>(tsks2[ind]) }), ind++;
  110. int id, cnt;
  111. if (que.empty()) break;
  112. tie(id, cnt) = que.front();
  113. que.pop();
  114. for (int i = 0; i < del; ++i) {
  115. if (cnt > 0) cout << id << ' ';
  116. else cout << "_ ";
  117. if (cnt > 0) cnt--;
  118. }
  119. i += del - 1;
  120. if (cnt > 0) que.push({ id, cnt });
  121. }
  122. cout << endl;
  123.  
  124.  
  125. cout << "sjf1: ";
  126. auto tsks3 = tasks;
  127. vector<pair<int, int>> prs(tsks3.size());
  128. for (int i = 0; i < 3; ++i)
  129. prs[i] = {get<2>(tsks3[i]), get<1>(tsks3[i])};
  130. sort(prs.begin(), prs.end());
  131. for (int i = 0; i < 3; ++i) {
  132. int id, cnt;
  133. tie(cnt, id) = prs[i];
  134. for (int i = 0; i < cnt; ++i)
  135. cout << id << ' ';
  136. }
  137. cout << endl;
  138.  
  139. cout << "sjf2: ";
  140. auto tsks4 = tasks;
  141. priority_queue<pair<int, int>> sjfque;
  142. sjfque.push({ -get<2>(tsks3[0]), get<1>(tsks3[0]) });
  143. int timesjf = 0;
  144. ind = 1;
  145. while (!sjfque.empty()) {
  146. int cnt, id;
  147. tie(cnt, id) = sjfque.top();
  148. sjfque.pop();\
  149. cnt *= -1;
  150. for (int i = 0; i < cnt; ++i)
  151. cout << id << ' ';
  152. timesjf += cnt;
  153. while (ind < 3 && get<0>(tsks3[ind]) <= timesjf)
  154. sjfque.push({ -get<2>(tsks3[ind]), get<1>(tsks3[ind]) }), ind++;
  155. }
  156. cout << endl;
  157.  
  158. system("pause");
  159. return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement