-
Notifications
You must be signed in to change notification settings - Fork 2
/
r13_complaints.cpp
64 lines (51 loc) · 3.92 KB
/
r13_complaints.cpp
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
/*
Офисное здание
В одной очень большой стране в одном очень большом городе стояло очень-очень большое здание, в котором граждане этой страны подавали жалобы на других граждан. Так как жалобщиков было очень много, оно работало круглосуточно, но каждый из посетителей, пришедших в какое-то время после нуля часов, был обязан покинуть здание до 24 часов.
Клерков, принимающих жалобы, было не очень много, из-за чего гражданам приходилось сидеть и ждать в очереди, пока нужный клерк освободится.
На эту организацию, принимающую жалобы, в неё же поступила жалоба, что жалобы рассматриваются недостаточно быстро и вам было поручено определить, а сколько же жалобщиков одновременно находится в здании. К счастью для вас, во всех жителей этой страны были встроены чипы, точно определяющие положение в любой момент времени.
Вам был дан доступ к данным за сутки. В 00:00:00 здание жалобщиков не ещё не содержало, а в 24:00:00 уже не содержало, так как все жалующиеся покинули здание. Дверей в здании много, поэтому вполне могли случаться такие ситуации, когда в одну и ту же секунду один жалобщик прибывал, а другой — покидал помещение. В таком случае оба считались находящимися в здании.
Ваша задача — определить максимальное число жалобщиков, одновременно находящихся в здании.
Input format
На вход программы подаётся число 1<=N<=200000 — число записей в базе данных. Каждая запись имеет содержит два времени с точностью до секунд — время прибытия и время убытия в формате HH:MM:SS.
Output format
Одно число — максимальное количество жалобщиков, одновременно находящихся в здании.
Examples
Input
5
02:03:42 20:44:18
02:01:25 13:54:01
13:04:48 23:39:34
02:08:16 19:30:44
01:02:34 08:00:07
Output
4
Эта задача аналогична задаче h21_storeroom за исключением точности до секунд.
*/
#include <iostream>
unsigned int readTime() {
char ch;
while ((ch = getchar()) < '0' || ch > '9');
unsigned int result = ((ch - '0') * 10 + (getchar() - '0')) * 60 * 60; // работаем в секундах
getchar(); // :
result += ((getchar() - '0') * 10 + getchar() - '0') * 60;
getchar(); // :
return result + (getchar() - '0') * 10 + getchar() - '0';
}
int main()
{
int minutesOfADay[24 * 60 * 60 + 1] = {};
unsigned int N;
std::cin >> N;
for (; N-- > 0;) {
minutesOfADay[readTime()]++; // time of arrival
minutesOfADay[readTime() + 1]--; // time of departure
}
int maxComplainers = 0;
int currentComplainers = 0;
for (N = 0; N < 24 * 60 * 60; N++) {
currentComplainers += minutesOfADay[N];
if (maxComplainers < currentComplainers) maxComplainers = currentComplainers;
}
std::cout << maxComplainers << std::endl;
return 0;
}