Задача к ЕГЭ по информатике на тему «Программирование — Обработка целочисленной информации с использованием сортировки» №5

Во многих компьютерных системах текущее время хранится в формате «UNIX-время» – количестве секунд от начала суток 1 января 1970 года. В одной компьютерной системе проводили исследование загруженности. Для этого в течение месяца с момента UNIX-времени 1633463028 фиксировали и заносили в базу данных моменты старта и финиша всех процессов, действовавших в этой системе.

Вам необходимо определить, какое наименьшее количество процессов выполнялось в системе одновременно на двух неделях, начавшихся в момент UNIX-времени 1633483028, и в течение какого максимального времени (в секундах) выполнялось такое наименьшее количество процессов без изменения их количества.

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

Первая строка входного файла содержит целое число N – общее количество процессов за весь период наблюдения. Каждая из следующих N строк содержит 2 целых числа: время старта и время завершения одного процесса в виде UNIX-времени. Все данные в строках входного файла отделены одним пробелом.

Если в качестве времени старта указан ноль, это означает, что процесс был активен в момент начала исследования. Если в качестве времени завершения указан ноль, это означает, что процесс не завершился к моменту окончания исследования.

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

В ответе запишите два целых числа: сначала наименьшее количество процессов, которые выполнялись одновременно на двух неделях, начиная с момента UNIX-времени 1633483028, затем максимальное количество подряд идущих секунд, в течение которых на этих неделях выполнялось такое наименьшее количество процессов.

start = 1633483028
 
finish = start + 2 * 7 * 24 * 60 * 60
 
file = open(«26_5.txt», «r»)
 
lines = file.readlines()
 
n = int(lines[0])
 
# Перебираем каждую стоку кроме первой (в которой N) и берем по одному числу из каждой
 
start_array = [int(line.split()[0]) for line in lines[1:]]
 
finish_array = [int(line.split()[1]) for line in lines[1:]]
 
for i in range(len(finish_array)):
 
    if finish_array[i] == 0:
 
        finish_array[i] = start + 20000000000000000000000000
 

 
start_array = sorted(start_array)
 
finish_array = sorted(finish_array)
 

 
i = 0
 
j = 0
 
minim = 10000000000000000000000000
 
k = 0
 

 
while i < n and j < n:
 
    if start_array[i] <= finish_array[j]:
 
        if k < minim and start_array[i] > start and start_array[i] < finish:
 
            minim = k
 
        k += 1
 
        i += 1
 
    else:
 
        k -= 1
 
        if k < minim and finish_array[j] >= start and finish_array[j] < finish:
 
            minim = k
 
        j += 1
 

 
while j < n:
 
    k -= 1
 
    if k < minim and finish_array[j] >= start and finish_array[j] < finish:
 
        minim = k
 
    j += 1
 

 
i = 0

 
j = 0
 
k = 0
 
ans_count = 0
 
curr_count = 0
 

 
for sec in range(start, finish):
 
    while i < len(start_array) and start_array[i] <= sec:
 
        k += 1
 
        i += 1
 
    while j < len(finish_array) and finish_array[j] <= sec:
 
        k -= 1
 
        j += 1
 
    if k == minim:
 
        curr_count += 1
 
    else:
 
        ans_count = max(ans_count, curr_count)
 
        curr_count = 0
 

 
print(minim, ans_count)

Ответ: 1497 73
Оцените статью
Я решу все!