Monster beats 2000
Мудрец
(12385)
3 дня назад
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// Преобразование времени в минуты с 7:00
int timeToMinutes(string time) {
int hours = stoi(time.substr(0, 1));
int minutes = stoi(time.substr(2, 2));
return (hours - 7) * 60 + minutes;
}
int minAdditionalAlarms(vector<int>& times) {
int n = times.size();
if (n < 3) return 3 - n; // Если меньше 3 будильников
// Проверяем все возможные тройки будильников
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
// Если разница между крайними будильниками <= 10 минут
if (times[k] - times[i] <= 10) {
return 0; // Дополнительные будильники не нужны
}
}
}
}
// Если не нашли подходящую тройку, нужен как минимум 1 будильник
int minNeeded = 1;
// Проверяем каждый интервал в 10 минут
for (int start = 0; start <= 120; start++) {
int count = 0;
for (int time : times) {
if (time >= start && time <= start + 10) {
count++;
}
}
// Если в интервале уже есть 2 будильника, нужен только 1
if (count >= 2) {
return 1;
}
}
return 2; // Иначе нужно минимум 2 будильника
}
int main() {
int n;
cin >> n;
vector<int> times;
for (int i = 0; i < n; i++) {
string time;
cin >> time;
times.push_back(timeToMinutes(time));
}
cout << minAdditionalAlarms(times) << endl;
return 0;
}
Александр Смирнов
Ученик
(100)
3 дня назад
Я отвечу на ваш вопрос как специалист по программированию. Ниже приведена пошаговая инструкция для решения задачи на C++.
Подход к решению
Обработка входных данных: Считать количество будильников и их время.
Преобразование времени: Преобразовать время в минуты, чтобы легче было сравнивать.
Итерация: Использовать три вложенных цикла для проверки всех возможных комбинаций будильников.
Подсчет дополнительных будильников: Если не удается найти три будильника за 10 минут, добавлять новые будильники и повторять проверку, пока не будет достигнута цель.
Код
Вот пример кода на C++ для решения задачи:
cpp
Копировать код
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// Функция для преобразования времени в минуты
int timeToMinutes(const string& time) {
int h = stoi(time.substr(0, 1));
int m = stoi(time.substr(3, 2));
return h * 60 + m;
}
// Основная функция
int main() {
int n;
cin >> n;
vector<int> alarms(n);
for (int i = 0; i < n; i++) {
string time;
cin >> time;
alarms[i] = timeToMinutes(time);
}
// Проверяем, достаточно ли уже имеющихся будильников
int additional = 0;
// Добавляем будильники до тех пор, пока не достигнем цели
while (true) {
bool found = false;
// Проверяем существующие будильники
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if (alarms[k] - alarms[i] <= 10) {
found = true;
break;
}
}
if (found) break;
}
if (found) break;
}
if (found) break; // Если нашли три будильника, выходим из цикла
// Если не нашли, добавляем новый будильник
int newAlarm = (alarms.empty()) ? 420 : (alarms.back() + 1); // 420 минут это 7:00
if (newAlarm > 540) break; // 540 минут это 9:00
alarms.push_back(newAlarm);
n++;
additional++;
}
cout << additional << endl;
return 0;
}
Пояснение к коду
Функция timeToMinutes: Преобразует время в формате "h:mm" в общее количество минут с 7:00.
Цикл: Проверяет все комбинации по три будильника. Если находится такая комбинация, программа завершает выполнение.
Добавление будильника: Если не удаётся найти три подходящих будильника, добавляется новый будильник, и количество дополнительных будильников увеличивается.
Вывод
Этот код поможет Фаине узнать, сколько дополнительных будильников ей нужно установить, чтобы быть уверенной в том, что проснётся. Она может использовать этот алгоритм, чтобы избежать случайного проспания.
Фаина не уверена, достаточно ли у неё будильников, чтобы гарантированно проснуться, и беспокоится о том, что может проспать. Поэтому она хочет установить дополнительные будильники. Все новые будильники также должны быть установлены между 7:00 и 9:00, и все будильники (как старые, так и новые) должны быть на разное время.
Ваша задача — определить минимальное количество дополнительных будильников, которые Фаина должна установить, чтобы быть уверенной, что она проснется. Если она уже может быть уверена в этом, то количество дополнительных будильников равно 0.
▎Входные данные
• Первая строка содержит одно целое число n — количество будильников, которые установила Фаина (1 ≤ n ≤ 20).
• Следующие n строк содержат время i-го будильника в формате h:mm (где 7 ≤ h ≤ 9 и 00 ≤ mm ≤ 59). Будильники указаны в строго возрастающем порядке времени.
▎Выходные данные
• Выведите минимальное количество дополнительных будильников, которые Фаина должна установить, чтобы гарантировать
пробуждение.