Задача №742. Массивы
Разбор добавил Роман Рубаненко
Для начала предположим,что максимальное значение чисел в обеих массивах не велики, например не превосходят 10^5.Тогда задача становиться очевидной: 1.Считываем числа первого массива,при этом для каждого числа увеличиваем счётчик на 1 с помощью прямой адресации. 2.Когда считываем второй массив просто выводим значение счётчика для каждого числа из второго массива. Свести данную задачу к только-что рассмотренной более простой задаче можно с помощью хэш-функции. Определим хэш-функцию от числа x как hash(x)=(x1*p^0+x2*p^1+x3*p2..+xn*p^n-1) mod q, где x1..xn-цифры числа x,p-некоторое простое число,например 17,q-число которое "обрезает" максимальное значение хэш-функции,в данной задаче нам подходит 10^5.Также число q можно определить как максимальную возможную размерность массива,которую мы готовы выделить для задачи. Итак теперь наш алгоритм существенно изменен: 1.Когда считываем элементы первой последовательности,то вычисляем его хэш-функцию.А дальше "клеим" связный список для чисел с одинаковым хэшем по следующему принципу:"бежим" по списку данного хэша,если мы встретили этот элемент,то просто увеличиваем счётчик данной позиции в списке,а иначе добавляем его в конец списка,а значение счётчика делаем равным единице. 2.Когда считываем второй массив,то вычисляем хэш его элемента,находим в связном списке позицию,на которой находиться этот элемент и выводим значение счётчика,или 0 если элемент с таким значением не был найден. На практике такой алгоритм на много эффективней,чем большинство алгоритмов построенных на сортировке и поиске. Надеюсь эта информация будет Вам полезна.Сдать: для сдачи задач необходимо войти в систему
1329
statement