С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
4 / 5 / 2
Регистрация: 17.09.2021
Сообщений: 296
1

Определить когда необходимо заехать в отель а когда выехать

17.07.2024, 22:55. Показов 1157. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Условие
Вы не поверите, но Петр на отлично сдал экзамен по математическому анализу. Порядок вокруг наводит порядок в голове.

Что нужно сделать после тяжелого экзамена - конечно же хорошенько отдохнуть. Каникулы уже не за горами, и Петр решил провести их с пользой, отдохнув от учебы и насладившись спокойствием в уединенном отеле где-нибудь на морском побережье.

«Гранд-отель Гильберта», который выбрал Петр, пользуется большой популярностью, и места в нем распродаются очень быстро. Ходят слухи, что в нем бесконечное количество номеров, да и принять он может бесконечное количество автобусов с бесконечным количеством посетителей.

Но Петра заинтересовал только один номер, поэтому он сразу же запросил расписание доступности этого номера на следующий месяц, чтобы выбрать для себя подходящий отрезок времени.

Он хочет выбрать непрерывный максимально возможный отрезок дней, когда сможет отдохнуть. Если таких отрезков несколько --- самый ранний из них.

В предстоящем месяце 28 дней, ровно 4 недели, первый день месяца начинается в понедельник, соответственно месяц заканчивается в воскресенье. Расписание представлено в удобном формате, где указаны дни недели, в которые интересующий Петра номер занят. В расписании указаны полные дни, которые заняты. Все остальные дни свободны.

Теперь перед Петром стоит задача определить максимальный отрезок времени с первого по двадцать восьмое число месяца, на который он сможет забронировать номер, чтобы максимально продолжительно насладиться отдыхом. Естественно, Петр хочет найти самый ранний из возможных отрезков, чтобы отдохнуть как можно скорее.

Помогите Петру определить, когда ему необходимо заехать в отель, а когда выехать.

Формат входных данных
Входные данные состоят из четырех строк, каждая из которых описывает одну неделю месяца. В каждой строке через пробел перечислены дни недели (MON, TUE, WED, THU, FRI, SAT, SUN), которые заняты, где «MON» --- понедельник, «TUE» --- вторник и так далее.

Гарантируется, что в одной строке указаны различные дни недели. Если ни один день на неделе не занят --- дана пустая строка. Каждая строка, в том числе пустая и последняя, заканчивается символом перевода строки.

Формат выходных данных
Ваша программа должна вывести два числа через пробел: начало и конец максимального отрезка свободных дней, который можно забронировать. Если существует несколько таких отрезков одинаковой продолжительности, требуется выбрать самый ранний из них. Если весь месяц занят, выведите "0 0".

Замечание
В первом примере заняты даты 1 (MON), 8 (MON), 15 (MON), 22 (MON), 27 (SAT). Самым большим отрезком является дата с 2 по 7.

Примеры данных
Пример 1
MON
MON
MON
MON SAT

2 7
Пример 2
TUE MON

10 28
Пример 3

1 28
Пример 4
MON THU SAT SUN FRI TUE WED
SUN TUE MON FRI THU SAT WED
FRI THU WED SAT MON SUN TUE
WED MON THU SAT TUE FRI SUN

0 0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2024, 22:55
Ответы с готовыми решениями:

Когда необходимо использовать локальную теорему, а когда интегральную теорему Лапласа?
Когда необходимо использовать локальную теорему, а когда интегральную теорему Лапласа ? Приведите...

Когда нужно использовать структуры, когда классы, а когда словарь?
Хеллоу. Не могу понять, когда, что, нужно использовать. Допустим мне нужно получить объект,...

На побережье три маяка; определить, когда они одновременно отключатся и когда одновременно загорятся
«На побережье три маяка. Первый светит в течение 3-х секунд, затем он отключается на 3 секунды....

Когда стоит использовать класс, а когда лучше обойтись без них?
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать...

1
537 / 327 / 169
Регистрация: 21.02.2011
Сообщений: 4,991
23.07.2024, 09:42 2
C++
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
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
 
int main() {
    // Массив для обозначения занятости дней
    std::vector<bool> occupied(28, false);
    
    // Дни недели
    std::string daysOfWeek[] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
 
    // Заполнение массива занятых дней
    for (int week = 0; week < 4; ++week) {
        std::string line;
        std::getline(std::cin, line);
        std::istringstream iss(line);
        std::string day;
 
        // Считываем занятые дни и помечаем их в occupied
        while (iss >> day) {
            auto it = std::find(std::begin(daysOfWeek), std::end(daysOfWeek), day);
            if (it != std::end(daysOfWeek)) {
                int dayIndex = (week * 7) + (it - daysOfWeek);
                occupied[dayIndex] = true;
            }
        }
    }
 
    // Ищем максимальный отрезок свободных дней
    int maxStart = -1, maxEnd = -1;
    int bestStart = -1, bestLength = 0;
 
    for (int i = 0; i < 28; ++i) {
        if (!occupied[i]) { // Если день свободен
            if (maxStart == -1) {
                // Начало нового свободного отрезка
                maxStart = i;
            }
            maxEnd = i; // Обновляем конец текущего свободного отрезка
        } else {
            // Если мы попали на занятый день, проверяем длину текущего отрезка
            if (maxStart != -1) {
                int currentLength = maxEnd - maxStart + 1;
                if (currentLength > bestLength) {
                    bestLength = currentLength;
                    bestStart = maxStart;
                }
                maxStart = -1; // Сбрасываем на случай следующего свободного отрезка
            }
        }
    }
 
    // Проверяем последний отрезок, если он был свободным
    if (maxStart != -1) {
        int currentLength = maxEnd - maxStart + 1;
        if (currentLength > bestLength) {
            bestLength = currentLength;
            bestStart = maxStart;
        }
    }
 
    // Проверяем, если вообще не нашли свободные дни
    if (bestStart == -1) {
        std::cout << "0 0" << std::endl;
    } else {
        std::cout << bestStart + 1 << " " << bestStart + bestLength << std::endl;
    }
 
    return 0;
}
0
23.07.2024, 09:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2024, 09:42
Помогаю со студенческими работами здесь

Edit - определять, когда нужно добавлять нули, а когда нет
Hi 8-), на форме размещены 3 компонента Edit. В Edit1 и Edit2 вносятся цифровые значения, а в...

Как узнать когда программу запустил User, а когда автозагрузка ?
Как узнать когда программу запустил User, а когда автозагрузка ?

HttpListener. Когда надо использовать BeginGetContext(EndGetContext), а когда GetContext
HttpListener. Когда надо использовать BeginGetContext(EndGetContext), а когда GetContext

Как проверять, когда джойстик зажат, и когда его отпускают?
Скачал ассет джойстика из ассет стора юнити, использую статичный. Нужно проверять, когда джостик...

Когда использовать модификатор для перемнной Volatile, а когда synchronized?
Я примерно знаю, для чего они - хотя в книге этому было посвящено немного времени(пришлось искать...

Когда страница не загружена, показывать div, когда загрузилась, скрыть
Здравствуйте. Встретилась такая проблема: ни один скрипт по скрытию блока при полной загрузке не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru