• Предмет: Информатика
  • Автор: xxxx20052005
  • Вопрос задан 4 месяца назад

Вася, решая одно из заданий ЕГЭ, вычисляет значение функции для всех чисел в диапазоне от 0 до 16777215. Компьютер Васи получает каждое значение за 1 мс. Подпольный пиратский квантовый компьютер «Мегатрон» может обработать все эти вычисления одновременно. Но так как он подпольный и пиратский, то постоянно делает ошибки в тех числах, двоичная запись которых содержит две единицы подряд, и их приходится обрабатывать каждое по отдельности. На сколько мс «Мегатрон» опередит в вычислениях Васю, если ему на вычисление функции для каждого числа (или одновременного вычисления функции для возможных значений) требуется также 1 мс? Ответ запишите числом без дополнительных пробелов и символов до и после (например: 18101150).
Срочно!​

Ответы

Ответ дал: FakeDeveloper
0

Ответ:

25 милисекунд.

Объяснение:

Если 16777215 x значений обрабатываются одновременно, и каждое значение нахождается за 1мс, то если бы у Мегатрона не был баг насчёт бинарных чисел с единицами больше 2 (назовём такие числа O), то Мегатрон напечатал бы все значения одновременно за 1мс, значит на 16777214 мс быстрее чем компьютер Васи, но из за бага, приходится тратить дополнительную 1мс на каждое число O, а таких чисел много в диапазоне [0, 16777215].

Напишем код (python), где в данном диапазоне добавляется одна секунда, когда встречается число O, чтобы баг работал и замедлял Мегатрон:

seconds=0

def hasTwoUnits(number):

   ones = 0

   for i in range(len(number)):

       if number[i]=="1": ones+=1

   if (ones>=2): return True

for i in range(0, 16777216):

   binary = str(format(i, "b"))

   if hasTwoUnits(binary): seconds+=1

   

print("seconds: ", seconds)

Результат — 16777191 милисекунд.

Значит в диапазоне  [0, 16777215] есть только 25 чисел(16777215-16777191), у которых меньше 2 единицы в бинарном виде.

Значит разница между скоростями Мегатрона и компьютера Васи — 25 мс (в пользу Мегатрона).


Ziorar: Однако, в задаче то сказано о двух единицах, идущих подряд. Плюс ещё 1 мс надо оставить на расчёт всех остальных значений. Итого, по моим расчётам, ответ будет- быстрее на 121392 мс.
FakeDeveloper: Разве "2 единицы идущих подряд" не значит "2 единицы и больше"? Если в задаче имелось ввиду "ровно 2 единицы, ни больше не меньше", то в моём коде стоит всего лишь убрать символ ">", и результат будет, что Мегатрон всё посчитал за 276+1 мс, значит в 16,776,938 мс быстрее компьютера Васи.
Ziorar: Две единицы подряд означает, что единицы идут друг за другом, стоят рядом друг с другом, вплотную, без зазора и мешающих нулей между ними. Проще говоря - "11". И, если подряд идущих единиц там будет больше двух - это по прежнему будет означать, что две единицы, идущих подряд в этом числе содержатся.
FakeDeveloper: хммм, если так, то по тому же коду, Мегатрона займёт на вычисления 16702191+1 мс, значит быстрее на 75023мс
Вас заинтересует