-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathos.cpp
More file actions
127 lines (121 loc) · 2.44 KB
/
Copy pathos.cpp
File metadata and controls
127 lines (121 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<limits.h>
#include<time.h>
#include<math.h>
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<string>
#include<map>
#include<regex>
using namespace std;
#define range(i, s, e) for (int i = (s); i < int(e); i++)
#define range0(i, e) for (int i = 0; i < int(e); i++)
#define input_int(n) int n;scanf("%d",&n);
#define input_int2(n,m) int n;int m;scanf("%d %d",&n,&m);
#define remax(max_record,refresh_number) max_record=std::max(max_record,refresh_number)
#define remin(min_record,refresh_number) min_record=std::min(min_record,refresh_number)
#define INF 0x3f3f3f3f
#define INF2 INT_MAX
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;
typedef pair<ll, ll> llP;
inline void read(int &x) {//only read int
static char c;
for (c = getchar(); !('0' <= c && c <= '9'); c = getchar());
for (x = 0; '0' <= c && c <= '9'; x = x * 10 + c - 48, c = getchar());
}
struct PRO {
int arr;
int bur;
int bur2;
int num;
int end;
int rest = 0;
}pro[5];
struct cmp {
};
int type = 0;
int main() {
printf("1.FIFS\n2.TIME ROBIN\n3.\n");
scanf("%d", &type);
switch (type) {
case 1: {
range0(i, 5) {
scanf("%d", &pro[i].arr);
pro[i].num = i;
}
range0(i, 5) {
scanf("%d", &pro[i].bur);
}
int flag = 0;
int nt = 0;
queue<int> sta;
int us = 0;
while (1) {
if (flag == 5)break;
range0(i, 5) {
if (nt >= pro[i].arr&&pro[i].rest == 0) {
sta.push(i);
pro[i].rest = 1;
}
}
if (us == 0 && !sta.empty()) {
int t = sta.front();
sta.pop();
us = pro[t].bur;
pro[t].end = nt + pro[t].bur;
flag++;
}
if (us > 0)us--;
nt++;
}
break;
}
case 2: {
input_int(slice);
range0(i, 5) {
scanf("%d", &pro[i].bur);
pro[i].bur2 = pro[i].bur;
}
int flag = 0;
int nt = 0;
for (int i = 0;; i = (i + 1) % 5) {
if (flag == 5)break;
if (pro[i].rest == 0) {
int t = min(pro[i].bur2, slice);
pro[i].bur2 -= t;
nt += t;
if (pro[i].bur2 == 0) {
pro[i].rest = 1;
flag++;
pro[i].end = nt;
}
}
}
break;
}
case 3: {
range0(i, 5) {
scanf("%d", &pro[i].arr);
pro[i].num = i;
}
range0(i, 5) {
scanf("%d", &pro[i].bur);
}
}
}
double avg = 0;
range0(i, 5) {
avg += (double)(pro[i].end - pro[i].arr - pro[i].bur) / 5;
printf("%d ", pro[i].end - pro[i].arr - pro[i].bur);
}
printf("%lf", avg);
getchar();
}