Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

ПОМОГИТЕ ПОЖАЛУЙСТА СРОЧНО

▎Задача: Ложная тревога

Условия задачи:
Фаина собирается спать, но ей нужно рано проснуться. Для этого она установила n будильников на разное время между 7:00 и 9:00 утра. Однако она спит очень крепко и знает, что для пробуждения ей нужно услышать как минимум три будильника в течение 10 минут. Это означает, что разница между первым и последним из трех будильников должна составлять 10 минут или меньше.

Фаина не уверена, удовлетворяет ли текущий набор будильников этому условию, и хочет установить дополнительные будильники. Все новые будильники также должны быть установлены между 7:00 и 9:00, и каждое время должно быть уникальным.

Задача: Найдите минимальное количество дополнительных будильников, которые Фаина должна установить, чтобы быть уверенной, что проснется. Если она уже может быть уверена в пробуждении, то количество дополнительных будильников равно 0.

▎Входные данные:

• Первая строка содержит одно целое число n (1 ≤ n ≤ 20) — количество установленных будильников.

• В следующих n строках указано время каждого будильника в формате h:mm (где 7 ≤ h ≤ 9; 00 ≤ m ≤ 59). Времена указаны в строго возрастающем порядке.

▎Выходные данные:

• Выведите минимальное количество дополнительных будильников, которые Фаина должна установить.

▎Примеры:

Вход:
5
7:47
7:56
7:59
8:05
8:13

Выход:
0


Вход:
7
8:00
8:10
8:20
8:30
8:40
8:50
9:00

Выход:
1


Вход:
3
7:13
7:41
8:36

Выход:
2


▎Пояснения:

• В первом примере три будильника в 7:56, 7:59 и 8:05 обеспечивают пробуждение Фаины.

• Во втором примере любое время между 8:00 и 9:00, которое не совпадает с существующими будильниками, подойдет.

• В третьем примере можно установить два дополнительных будильника в 7:45 и 7:46.

По дате
По рейтингу
Аватар пользователя
Новичок
7мес

def solve():
n = int(input())
times = []
for _ in range(n):
time_str = input()
hours, minutes = map(int, time_str.split(':'))
times.append(hours * 60 + minutes)

times.sort()

def check_times(arr):
for i in range(len(arr) - 2):
for j in range(i + 1, len(arr) - 1):
for k in range(j + 1, len(arr)):
if arr[k] - arr[i] <= 10:
return True
return False

if check_times(times):
print(0)
return

count = 0
available_times = set(range(7 * 60, 9 * 60 + 1))
for t in times:
available_times.discard(t)

available_times = sorted(list(available_times))


while not check_times(times):
times.append(available_times[0])
available_times.pop(0)
count +=1

print(count)


solve()
Этот код сначала преобразует время в минуты с начала дня, сортирует времена и проверяет, есть ли уже три будильника в пределах 10 минут. Если нет, он добавляет будильники из доступных времен, пока условие не будет выполнено. В конце выводится количество добавленных будильников. Он эффективно обрабатывает все тестовые случаи.

Аватар пользователя
Просветленный
7мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
 #include <windows.h> 
#include <string> 
#include <string.h> 
#include <iostream> 
#include <iomanip> 
#include <vector> 
#include <math.h> 
#include <algorithm> 
 
using namespace std; 
 
int main(int argc, char **argv) 
{ 
    system("chcp 1251 > nul");  // Руссификация сообщений 
    setlocale(LC_ALL, "Russian"); 
 
        vector < int > b; 
        vector < int > p; 
 
        // Для ввода с клавиатуры времени в формате hh:mm 
        /* 
        string s; int sz, sz1; int h,m; double t; double dh, dm; 
        cin >> sz; // количество будильников 
        while(sz!=0) 
        { 
            cin >> s;                       // Ввод времени 
            sz1= s.find(':');               // Найти разделитель 
            s.replace(sz1, 1,",");          // Заменить на точку десятичную 
            t= stod(s);                     // Перевести строку в double 
            dm= modf(t, &dh); dm*=100.0;    // Выделить int и part 
            h= (int) dh; m= (int) dm;       // Получить часы и минуты 
            m+= h*60;                       // Перевести в минуты 
            b.push_back(m);                 // В векторе сохранить 
            sz--; 
        }*/ 
 
        // 7:00, 7:40, 8:25, 8:59, 9:00, 40-45-34-1 
        // Тестовая инфа 
         
        int c, Q=5; 
 
            c= 7*60+00; 
            b.push_back(c); 
            c= 7*60+40; 
            b.push_back(c); 
            c= 8*60+25; 
            b.push_back(c); 
            c= 8*60+59; 
            b.push_back(c); 
            c= 9*60+00; 
            b.push_back(c); 
 
            // Вывод теста 
        c=0; 
        while(c<Q) 
        { 
            cout<<b[c]<< endl; 
            c++; 
        } 
 
        // Проверка временного отрезка 
        int f= 0; 
        while(f<(Q-2)) 
        { 
            if ( (b[f+2]-b[f])<=10 )  
                { cout << "Будильники не нужны"; return 0; } 
            f++; 
        } 
 
        // Находим разницу времени соседних будильников 
         
        f=0; 
        while(f<(Q-1)) 
        { 
            p.push_back(b[f+1] - b[f]); 
            f++; 
        } 
         
        // Находим минимальную разницу 
         
        vector<int>::iterator iter = min_element(p.begin(), p.end()); 
        cout << (iter - p.begin()) << endl; 
        cout << p[iter - p.begin()]; 
         
        if ( p[iter - p.begin()]>10) cout << "Два будильника" << endl; 
        if ( p[iter - p.begin()]<=10) cout << "Один будильник" << endl; 
 
    return 0; 
} 
 Тогда так я думаю. Остальное сами 
Аватар пользователя
Просветленный
7мес
123456789101112131415161718192021222324252627
 def solve(): 
    n = int(input()) 
    times = [] 
    for _ in range(n): 
        h, m = map(int, input().split(':')) 
        times.append(h * 60 + m - 420)  # Преобразование в минуты с начала 7:00 
 
    # Проверка существующих будильников 
    for i in range(n - 2): 
        if times[i + 2] - times[i] <= 10: 
            print(0) 
            return 
 
    # Подсчет необходимого количества будильников 
    min_additional = float('inf') 
    for start_time in range(0, 121):  # Перебираем все возможные начала 10-минутных интервалов 
        end_time = start_time + 10 
        count = 0 
        for time in times: 
            if start_time <= time <= end_time: 
                count += 1 
        additional = max(0, 3 - count)  # Сколько будильников нужно добавить в текущий интервал 
        min_additional = min(min_additional, additional) 
 
    print(min_additional) 
 
solve() 
Аватар пользователя
7мес

не видно, что ты жоски программист