egogoboy

высшая проба отбор №3

Nov 15th, 2022 (edited)
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.89 KB | None | 0 0
  1. /*Сдать решение задачи C-SHA-57
  2. Полный балл:  100
  3. Бонусные баллы:   
  4. Имя входного файла: in.txt или стандартный поток ввода
  5. Имя выходного файла:   out.txt или стандартный поток вывода
  6. Ограничение времени:  1 с
  7. Ограничение памяти:    512M
  8. SHA-57
  9. Вы проникли в тестирующую систему своей школы, и теперь вам осталось только узнать пароль отличника Вани, чтобы списать у него решение задачи. Только вот проблема: пароль хранится в захешированном виде.
  10.  
  11. Алгоритм SHA-57 работает так:
  12.  
  13. изначально hash равен 0
  14. После этого к хешу добавляются символы пароля слева направо. При добавлении символа chr новое значение hash равняется ((hash × 57) ⊕ ord(chr)) mod (2M)
  15. Здесь ⊕ - побитовое исключающее ИЛИ, mod - операция взятия остатка по модулю, ord(chr) - номер буквы в английском алфавите: ord(a)=1, ord(b)=2, ..., ord(z)=26. В пароле могут быть только маленькие английские буквы.
  16.  
  17. Вам нужно определить, сколько различных паролей длины n из маленьких английских букв имеют значение хеша h.
  18.  
  19. Формат входных данных
  20. В единственной строке ввода вам даётся через пробел 3 числа: n, M, h (1 ≤ n ≤ 10, 2 ≤ M ≤ 25, 0 ≤ h < 2M) - длина пароля, число M из функии подсчёта хеша и хеш пароля.
  21.  
  22. Формат результата
  23. Выведите одно число - количество паролей длины n, которые имеют хеш h.
  24.  
  25. Примеры
  26. Входные данные
  27. 1 3 1
  28. Результат работы
  29. 4
  30. Входные данные
  31. 3 14 10694
  32. Результат работы
  33. 3
  34. Входные данные
  35. 3 5 0
  36. Результат работы
  37. 547
  38. Примечания
  39. Буквы английского языка по порядку: abcdefghijklmnopqrstuvwxyz
  40.  
  41. Рассмотрим подсчёт SHA-57 для строки "hse" и M = 14:
  42.  
  43. Для строки "h": ((0 × 57) ⊕ 8) mod (214) = 8
  44. После добавления "s": ((8 × 57) ⊕ 19) mod (214) = 475
  45. Для итоговой строки "hse": ((475 × 57) ⊕ 5) mod (214) = 10694
  46. Для n = 3, M = 14 хеш 10694 имеют 3 пароля: "cwz", "hse", "rxl". Поэтому ответ во втором примере равен 3.*/
Tags: olimp
Advertisement
Add Comment
Please, Sign In to add comment