|
2 / 2 / 0
Регистрация: 05.11.2018
Сообщений: 55
|
|
Проверка блокчейна08.11.2018, 10:58. Показов 45733. Ответов 8
Ограничение времени 1 секунда
Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt Блокчейн (blockchain) переводится как «цепочка блоков». Это способ хранения данных, защищённый от подделки, используемый, в частности, криптовалютой биткоин. Блокчейн действительно представляет собой последовательность блоков. Каждый блок представляет собой некоторую полезную информацию (в частности, в случае биткоина это список транзакций за определённый период времени — кто кому когда сколько денег передал), снабжённую случайным числом и некоторыми служебными данными, в том числе хэшем — числом, которое по определённой формуле зависит от остальной части блока и хэша предыдущего блока. Хэш должен быть меньше определённого числа. При этом формула, по которой вычисляется хэш (хэш-функция), устроена так, что невозможно получить достаточно маленький хэш иначе, чем перебирая различные значения случайного числа. Поэтому если злоумышленник решит подделать блокчейн (и, допустим, вставить в его середину блок с записью о том, что все передают ему все свои деньги), то ему придётся подобрать новое случайное число в новое поддельном блоке и всех последующих (ведь хэш каждого следующего блока зависит от хэша предыдущего), что потребует невозможно больших вычислительных мощностей. Поэтому блокчейн в целом защищён от подобных атак. Напишите программу, которая проводит проверку правильности хэшей в модельном блокчейне с простой хэш-функцией. Блок bn с номером n включает полезную информацию mn, представленную натуральным числом, rn — случайное число от 0 до 255 и hn — хеш (целое число от 0 до 255). У каждого блока хэш вычисляется по формуле (здесь mod означает остаток от деления), при вычислении хэша начального блока h0 вместо хэша предыдущего блока берётся ноль. При этом каждый блок представлен одним числом bn = hn + rn×256 + mn×2562. При этом требуется, чтобы хэш hn был меньше 100. Формат ввода На первой строке вводится натуральное число N — количество блоков. Далее следуют N чисел bn, каждое на отдельной строке. Формат вывода Следует вывести номер первого блока, у которого неправильный хэш (не меньше 100 или не совпадает с вычисленным по указанной в условии формуле), или -1, если все хэши в блокчейне правильные. Нумерация блоков идёт с нуля, т. е. они имеют номера от 0 до N-1.
1
|
|
| 08.11.2018, 10:58 | |
|
Ответы с готовыми решениями:
8
Проверка блокчейна Проверка блокчейна
|
|
1 / 1 / 0
Регистрация: 02.01.2019
Сообщений: 12
|
|
| 03.01.2019, 21:24 | |
|
Блин ребята помогите плиз, срочно надо. Спасибо заранее
0
|
|
|
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323
|
||||||
| 04.01.2019, 12:04 | ||||||
|
mimimimimimimim,
It's easy ![]()
17
|
||||||
|
1 / 1 / 0
Регистрация: 02.01.2019
Сообщений: 12
|
|
| 04.01.2019, 15:09 | |
|
Thank!!!
1
|
|
|
5 / 4 / 1
Регистрация: 12.02.2017
Сообщений: 11
|
|||||||
| 13.03.2020, 00:26 | |||||||
|
А не мог бы пояснить как ты из условия это взял?
3
|
|||||||
|
2 / 2 / 0
Регистрация: 28.09.2020
Сообщений: 17
|
|
| 17.11.2020, 16:19 | |
|
Смотри, делишь всю первую формулу на 256. Тогда слева будет b % 256, а справа выражение r * 256 + m * 256 ** 2 делится на 256, но также справа имеется член h, значит остаток от деления правой части на 256 равен h. Значит h == b % 256. Теперь заметим, что r + m * 256 == b // 256. Если теперь найти остаток от деления данного выражения на 256, то он (остаток) будет равен b // 256 % 256, т.к m * 256 делится на 256, а r - свободный член, являющийся остатком.
Добавлено через 1 минуту Спасибо, очень помогли!
0
|
|
|
1 / 1 / 0
Регистрация: 07.10.2022
Сообщений: 12
|
|
| 06.11.2022, 22:17 | |
|
вопрос, а почему мы именно делим на 256. в условии не написано ничего про это и сказано про рандом? за пояснение и за код спасибо
0
|
|
|
2 / 2 / 0
Регистрация: 08.01.2023
Сообщений: 1
|
||||||
| 08.01.2023, 23:54 | ||||||
bn = hn + rn * 256 + mn * 256 ** 2, мы сдвигаем каждый элемент на разряд. например (пример в нашей любимой 10ричной системе исчисления): n = first + second * 10 + third * (10 ** 2) n = str(first) + str(second) + str(third) т.е. и в первом и во втором случае они идут друг за другом. Поэтому мы и можем вытаскивать по разряду из блока
2
|
||||||
|
1 / 1 / 0
Регистрация: 01.02.2023
Сообщений: 2
|
|
| 01.02.2023, 15:58 | |
|
Добавлено через 21 секунду
Привет! Здорово объяснил, спасибо! Был один момент, на котором я затупил, объясню для тех, кто тоже не понял: В решении мы тянем элементы из разрядов в обратном порядке, потому что нам и в задании их дали в обратном порядке. То есть, 375 = 3 * 100 + 7 * 10 + 5, а не 5 + 7 * 10 + 3 * 100, как нам дали в задании.
1
|
|
| 01.02.2023, 15:58 | |
|
Помогаю со студенческими работами здесь
9
Ищем программистов блокчейна и криптографов Практика с алгоритмом блокчейна и собственная наработка Что быстрее, проверка на null, или проверка на тип перечисления в запросе? Перегрузить операции: % проверка на принадлежность; * пересечение множеств; < проверка на подмножество
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|