ПИТОН Одна торговая сеть проводит опрос потребителей о предпочтительной марке одного из товаров. Марки товара пронумерованы от 1 до K. Каждый участник опроса выбирает одну из K марок. Результаты опроса записываются в блокчейн.

Каждый блок блокчейна имеет следующую структуру. Первое число — это количество записанных голосов в данном блок блокчейна. Назовем его count. Второе число (назовем его sum) — это контрольная сумма всех голосов в предыдущем блоке блокчейна по модулю 4294967291 (то есть остаток от деления суммы голосов на это число). Далее в блоке следует count чисел от 1 до K — зарегистрированные голоса.

В первом блоке контрольная сумма предыдущего блока равна 0.

Последний блок блокчейна особенный, в нем количество записей равно 0, и хранится только контрольная сумма голосов предыдущего блока.

К сожалению, в программу сохранения голосов в блокчейне вкралась ошибка, которая может приводить к искажению информации в блоках блокчейна. А именно, в испорченном блоке все записи об отданных голосах уменьшаются на 1 кроме тех, которые и так равны 1. То есть, если запись об отданном голосе была равна 5, в испорченном блоке она станет равна 4, но запись о голосовании 1 останется 1. Значения count и sum в блоке не искажаются, то есть остаются правильными. Один блок может быть испорчен не более одного раза.

Например, пусть блокчейн состоит из двух блоков следующей структуры:

Одна торговая сеть проводит опрос потребителей о предпочтительной марке одного из товаров. Марки товара пронумерованы от 1 до K. Каждый участник опроса выбирает одну из K марок. Результаты опроса записываются в блокчейн.

Каждый блок блокчейна имеет следующую структуру. Первое число — это количество записанных голосов в данном блок блокчейна. Назовем его count. Второе число (назовем его sum) — это контрольная сумма всех голосов в предыдущем блоке блокчейна по модулю 4294967291 (то есть остаток от деления суммы голосов на это число). Далее в блоке следует count чисел от 1 до K — зарегистрированные голоса.

В первом блоке контрольная сумма предыдущего блока равна 0.

Последний блок блокчейна особенный, в нем количество записей равно 0, и хранится только контрольная сумма голосов предыдущего блока.

К сожалению, в программу сохранения голосов в блокчейне вкралась ошибка, которая может приводить к искажению информации в блоках блокчейна. А именно, в испорченном блоке все записи об отданных голосах уменьшаются на 1 кроме тех, которые и так равны 1. То есть, если запись об отданном голосе была равна 5, в испорченном блоке она станет равна 4, но запись о голосовании 1 останется 1. Значения count и sum в блоке не искажаются, то есть остаются правильными. Один блок может быть испорчен не более одного раза.

Например, пусть блокчейн состоит из двух блоков следующей структуры:

10 0 1 2 3 4 5 6 1 2 1 3 -- первый блок

0 28 -- второй блок

Контрольная сумма всех голосов (1 2 3 4 5 6 1 2 1 3) певого блока равна 28, что сопадает с суммой голосов, записанной во втором блоке. Это означает, что блок не испорчен, что позволяет просто посчитать популярность каждой марки.

Пусть дан блокчейн следующей структуры:

10 0 1 1 2 3 4 5 1 1 1 2 -- первый блок

0 28 -- второй блок

Сумма всех голосов первого блока равна 21, что не совпадает с суммой голосов, записанной во втором блоке. Значит блок испорчен. Можно однозначно восстановить, сколько голосов было подано за каждую марку.

На стандартном потоке ввода сначала задается число K, затем подаются данные в формате, описанном выше. Количество товаров K не меньше 1 и не больше 255. Общее количество участников опроса не превосходит 1000. Числа во вводе могут разделяться произвоным количеством пробелов, табуляций и переводов строк.

На стандартный поток вывода напечатайте K чисел: количество голосов, отданных марки товара.

suchilinaelya suchilinaelya    1   08.11.2021 11:40    2

Другие вопросы по теме Информатика