Обработка целочисленной информации. Задания для подготовки
i
Во многих компьютерных системах текущее время хранится в формате «UNIX-время» — количестве секунд от начала суток 1 января1970 года.
В одной компьютерной системе проводили исследование загруженности. Для этого в течение месяца с момента UNIX-времени 1633046400 фиксировали и заносили в базу данных моменты старта и финиша всех процессов, действовавших в этой системе.
Вам необходимо определить, какое наибольшее количество процессов выполнялось в системе одновременно на неделе, начавшейся в момент UNIX-времени 1633305600, и в течение какого суммарного времени (в секундах) выполнялось такое наибольшее количество процессов.
Первая строка входного файла содержит целое число N — общее количество процессов за весь период наблюдения. Каждая из следующих N строк содержит 2 целых числа: время старта и время завершения одного процесса в виде UNIX-времени. Все данные в строках входного файла отделены одним пробелом.
Если в качестве времени старта указан ноль, это означает, что процесс был активен в момент начала исследования. Если в качестве времени завершения указан ноль, это означает, что процесс не завершился к моменту окончания исследования.
При совпадающем времени считается, что все старты и завершения процессов происходят одновременно, в начале соответствующей секунды. В частности, если время старта одного процесса совпадает с временем завершения другого и других стартов и завершений в этот момент нет, то количество активных процессов в этот момент не изменяется.
В ответе запишите два целых числа: сначала максимальное количество процессов, которые выполнялись одновременно на неделе, начиная с момента UNIX-времени 1633305600, затем суммарное количество секунд, в течение которых на этой неделе выполнялось такое максимальное количество процессов.
Ответ:
Решение.
Заметим, что неделя в формате UNIX-времени — это 604800 секунд. Создадим массив time_process размером 604800 элементов — в нём будем отображать данные о процессах, начавшихся на неделе, начавшейся с момента UNIX-времени 1633305600. Объявим переменную max_process — в ней будем хранить, какое наибольшее количество процессов выполнялось в системе одновременно на неделе. Объявим переменную sum_time — в ней будем хранить суммарное количество секунд, в течение которых на этой неделе выполнялось максимальное количество процессов. Переменную count будем использовать для подсчёта текущего количество выполняемых процессов на неделе в данную секунду.
Если процесс начался до требуемой недели, а закончился после начала этой недели, будем сразу увеличивать значение счётчика count. Если процесс начался на требуемой неделе, к элементу массива time_process, соответствующему секунде начала очередного процесса на неделе, будем прибавлять единицу. Если процесс окончился на требуемой неделе, от элемента массива time_process, соответствующему секунде окончания очередного процесса на наделе, будем отнимать единицу — таким образом учтём условие, что если время старта одного процесса совпадает с временем завершения другого и других стартов и завершений в этот момент нет, то количество активных процессов в этот момент не изменяется. Учитывая условия выше, считаем файл. После этого в цикле «for» переберём элементы массива time_process, прибавляя к счётчику count значения элементов этого массива. Если значение count окажется больше значения переменной max_process — будем обновлять значение этой переменной. В этом же цикле найдём суммарное количество секунд, в течение которого выполнялось наибольшее количество процессов — к переменной sum_time будем добавлять единицу каждый раз, когда будет выполнятся условие count = max_process. Если будет встречена ситуация, когда count > max_process — будем обнулять переменную sum_time.
Обработка целочисленной информации. Задания для подготовки
i
Во многих компьютерных системах текущее время хранится в формате «UNIX-время» — количестве секунд от начала суток 1 января1970 года.
В одной компьютерной системе проводили исследование загруженности. Для этого в течение месяца с момента UNIX-времени 1633046400 фиксировали и заносили в базу данных моменты старта и финиша всех процессов, действовавших в этой системе.
Вам необходимо определить, какое наибольшее количество процессов выполнялось в системе одновременно на неделе, начавшейся в момент UNIX-времени 1634515200, и в течение какого суммарного времени (в секундах) выполнялось такое наибольшее количество процессов.
Первая строка входного файла содержит целое число N — общее количество процессов за весь период наблюдения. Каждая из следующих N строк содержит 2 целых числа: время старта и время завершения одного процесса в виде UNIX-времени. Все данные в строках входного файла отделены одним пробелом.
Если в качестве времени старта указан ноль, это означает, что процесс был активен в момент начала исследования. Если в качестве времени завершения указан ноль, это означает, что процесс не завершился к моменту окончания исследования.
При совпадающем времени считается, что все старты и завершения процессов происходят одновременно, в начале соответствующей секунды. В частности, если время старта одного процесса совпадает с временем завершения другого и других стартов и завершений в этот момент нет, то количество активных процессов в этот момент не изменяется.
В ответе запишите два целых числа: сначала максимальное количество процессов, которые выполнялись одновременно на неделе, начиная с момента UNIX-времени 1634515200, затем суммарное количество секунд, в течение которых на этой неделе выполнялось такое максимальное количество процессов.
Ответ:
Решение.
Заметим, что неделя в формате UNIX-времени — это 604800 секунд. Создадим массив time_process размером 604800 элементов — в нём будем отображать данные о процессах, начавшихся на неделе, начавшейся с момента UNIX-времени 1634515200. Объявим переменную max_process — в ней будем хранить, какое наибольшее количество процессов выполнялось в системе одновременно на неделе. Объявим переменную sum_time — в ней будем хранить суммарное количество секунд, в течение которых на этой неделе выполнялось максимальное количество процессов. Переменную count будем использовать для подсчёта текущего количество выполняемых процессов на неделе в данную секунду.
Если процесс начался до требуемой недели, а закончился после начала этой недели, будем сразу увеличивать значение счётчика count. Если процесс начался на требуемой неделе, к элементу массива time_process, соответствующему секунде начала очередного процесса на неделе, будем прибавлять единицу. Если процесс окончился на требуемой неделе, от элемента массива time_process, соответствующему секунде окончания очередного процесса на наделе, будем отнимать единицу — таким образом учтём условие, что если время старта одного процесса совпадает с временем завершения другого и других стартов и завершений в этот момент нет, то количество активных процессов в этот момент не изменяется. Учитывая условия выше, считаем файл. После этого в цикле «for» переберём элементы массива time_process, прибавляя к счётчику count значения элементов этого массива. Если значение count окажется больше значения переменной max_process — будем обновлять значение этой переменной. В этом же цикле найдём суммарное количество секунд, в течение которого выполнялось наибольшее количество процессов — к переменной sum_time будем добавлять единицу каждый раз, когда будет выполнятся условие count = max_process. Если будет встречена ситуация, когда count > max_process — будем обнулять переменную sum_time.