-
Notifications
You must be signed in to change notification settings - Fork 1
/
test.h
87 lines (78 loc) · 1.78 KB
/
test.h
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
/*
* R X 收到朋友x的消息
* S X 发送给朋友x的消息
* W X 停留xs
*
* 你发送的唯一的消息是回复你已经收到的消息
* 对于任意一个朋友的消息,你只回复一次
* 你的朋友不发送一个后续消息直到你已经回复了以前的消息
*
* 一条消息的等待时间是:你收到它的时间到你回复它的时间
*
* 如果一个朋友X收到了他发送的所有消息的回复,那么他的等待时间就是所有消息的等待时间
* 否则等待时间是-1
14
R 12
W 2
R 23
W 3
R 45
S 45
R 45
S 23
R 23
W 2
S 23
R 34
S 12
S 34
12 2 + 3 + 1 + 1 + 1 + 2 + 1 + 1 = 13
*/
#include <iostream>
#include <unordered_map>
#include <map>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int M, X, time = 0;
bool flag = false;
string cmd;
map<int, int> msg_time;
unordered_map<int, int> wait_time;
cin >> M;
while (M--) {
cin >> cmd >> X;
switch (cmd[0]) {
case 'W':
time += X;
flag = true;
break;
case 'R':
if (!flag) {
++time;
} else {
flag = false;
}
msg_time[X] = time;
break;
case 'S':
if (!flag) {
++time;
} else {
flag = false;
}
wait_time[X] += time - msg_time[X];
msg_time[X] = -1;
break;
}
}
for (auto iter : msg_time) {
cout << iter.first << " ";
if (~iter.second) cout << "-1";
else cout << wait_time[iter.first];
cout << "\n";
}
return 0;
}