Матч
187, Офисная парковка (OfficeParking)
Дивизион 2,
Уровень 1
Возле офиса находятся парковочные
места, расположенные в линию и пронумерованные последовательно начиная с 1. В
течение дня работники приезжают и уезжают на автомобилях, паркуясь на свободных местах. Необходимо по
заданному множеству событий определить наименьшее количество требуемых
парковочных мест. Каждое событие задается строкой, имеющей вид: “<имя
сотрудника> <arrives / departs>”.
Класс: OfficeParking
Метод: int
spacesUsed(vector<string> events)
Ограничения:
каждый элемент массива events содержит от 9 до 50 букв латинского алфавита.
Вход. Массив событий прибытия и отправления автомашин events.
Выход. Наименьшее требуемое количество парковочных мест на стоянке.
Пример входа
events |
{“Alice arrives","bob arrives","Alice
departs", "Charles arrives","bob
departs","Charles departs"} |
{"AdminBrett arrives","lbackstrom
arrives","AdminBrett departs", "mike arrives", "TheFaxman
arrives","AdminBrett arrives", "lbackstrom departs","dok arrives",
"AdminBrett departs", "gt arrives","AdminBrett
arrives","lbackstrom arrives", "AdminBrett departs","jhughes
arrives","jhughes departs", "TheFaxman departs", "MaryJoe
arrives","AdminBrett arrives", "AdminBrett departs","AdminBrett
arrives"} |
Пример выхода
2
6
РЕШЕНИЕ
элементарные вычисления
В задаче достаточно найти момент,
когда одновременно прибыло на стоянку максимальное количество автомобилей. Для
этого заведем переменную c, в которой будем отслеживать число работников, прибывших
в офис. С прибытием работника увеличиваем c на 1, с отъездом – уменьшаем на
1. Наибольшее значение, принимаемое переменной c, храним в max. После обработки всех событий
требуемое число парковочных мест находится в переменной max.
ПРОГРАММА
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
class OfficeParking
{
public:
int spacesUsed(vector<string> events)
{
char who[50], event[10];
int max, i, c;
for(max = c = i = 0; i <
events.size(); i++)
{
sscanf(events[i].c_str(),"%s %s",who,event);
if (!strcmp(event,"arrives")) c++; else
c--;
if (c > max) max = c;
}
return max;
}
};