Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <vector>
- #include <stack>
- #include <queue>
- #include <list>
- #include <set>
- #include <map>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #include <string>
- int main() {
- using namespace std;
- std::ios::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- const int inf = (int)2e9;
- int n, a, b,c, sum = 0;
- n = 3;// cin >> n;
- priority_queue<tuple<int, int,int>> systems, simples;
- vector<tuple<int, int, int, int>> tasks;
- for (int i = 0; i < n; ++i) {
- cin >> a >> b >> c;
- if (c == 0)
- simples.push({ -a ,i + 1,b });
- else
- systems.push({ -a , i + 1,b });
- tasks.push_back({ a, i + 1, b, c});
- sum += b;
- }
- sort(tasks.begin(), tasks.end());
- int tcur = 0;
- vector<pair<int, int>> ans;
- cout << "fifs: ";
- while (! systems.empty() || ! simples.empty()) {
- int tsy = -(systems.empty() ? -inf : get<0>(systems.top()));
- int tsi = -(simples.empty() ? -inf : get<0>(simples.top()));
- if (tcur >= tsy) {
- int start, idproc, cnt;
- tie(start, idproc, cnt) = systems.top();
- start *= -1;
- systems.pop();
- ans.push_back({ idproc, cnt });
- tcur += cnt;
- continue;
- }
- if (! simples.empty()) {
- int start, idproc, cnt;
- tie(start, idproc, cnt) = simples.top();
- start *= -1;
- simples.pop();
- int dt = min(cnt, tsy - tcur);
- cnt -= dt;
- tcur += dt;
- ans.push_back({ idproc, dt });
- if (cnt != 0) simples.push({ start, idproc, cnt });
- }
- if (!systems.empty()) {
- int start, idproc, cnt;
- tie(start, idproc, cnt) = systems.top();
- start *= -1;
- systems.pop();
- ans.push_back({ idproc, cnt });
- tcur += cnt;
- }
- }
- for(auto & x : ans) {
- for (int i = 0; i < x.second; ++i)
- cout << x.first << ' ';
- }
- cout << endl;
- cout << "rr1: ";
- auto tsks = tasks;
- bool run = true;
- int del = 2;
- while (run) {
- run = false;
- for (auto & x : tsks) {
- int start, idproc, cnt, prior;
- tie(start, idproc, cnt, prior) = x;
- if (cnt == 0) continue;
- run = true;
- for (int i = 0; i < del; ++i) {
- if (cnt > 0) cout << idproc << ' ';
- else cout << "_ ";
- if (cnt > 0) cnt--;
- }
- x = { start, idproc, cnt, prior };
- }
- }
- cout << endl;
- cout << "rr2: ";
- auto tsks2 = tasks;
- int ind = 0;
- queue<pair<int, int >> que;
- for (int i = 0; i < inf; ++i) {
- if (ind < 3 && get<0>(tsks2[ind]) == i)
- que.push({ get<1>(tsks2[ind]), get<2>(tsks2[ind]) }), ind++;
- int id, cnt;
- if (que.empty()) break;
- tie(id, cnt) = que.front();
- que.pop();
- for (int i = 0; i < del; ++i) {
- if (cnt > 0) cout << id << ' ';
- else cout << "_ ";
- if (cnt > 0) cnt--;
- }
- i += del - 1;
- if (cnt > 0) que.push({ id, cnt });
- }
- cout << endl;
- cout << "sjf1: ";
- auto tsks3 = tasks;
- vector<pair<int, int>> prs(tsks3.size());
- for (int i = 0; i < 3; ++i)
- prs[i] = {get<2>(tsks3[i]), get<1>(tsks3[i])};
- sort(prs.begin(), prs.end());
- for (int i = 0; i < 3; ++i) {
- int id, cnt;
- tie(cnt, id) = prs[i];
- for (int i = 0; i < cnt; ++i)
- cout << id << ' ';
- }
- cout << endl;
- cout << "sjf2: ";
- auto tsks4 = tasks;
- priority_queue<pair<int, int>> sjfque;
- sjfque.push({ -get<2>(tsks3[0]), get<1>(tsks3[0]) });
- int timesjf = 0;
- ind = 1;
- while (!sjfque.empty()) {
- int cnt, id;
- tie(cnt, id) = sjfque.top();
- sjfque.pop();\
- cnt *= -1;
- for (int i = 0; i < cnt; ++i)
- cout << id << ' ';
- timesjf += cnt;
- while (ind < 3 && get<0>(tsks3[ind]) <= timesjf)
- sjfque.push({ -get<2>(tsks3[ind]), get<1>(tsks3[ind]) }), ind++;
- }
- cout << endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement