eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Сортировка "пузырьком"

Сортировка "пузырьком"

\textit{Сортировка простыми обменами, сортиро́вка пузырько́м (англ. bubble sort) --- простой алгоритм сортировки. Для понимания и реализации этот алгоритм --- простейший, но эффективен он лишь для небольших массивов. Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяется сортировка вставками. Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает --- массив отсортирован. При проходе алгоритма, элемент, стоящий не на своём месте, <<всплывает>> до нужной позиции как пузырёк в воде, отсюда и название алгоритма.} \textit{ВикипедиЯ} Пузырьковая сортировка является очень простым алгоритмом и его временная сложность составляет \textbf{O}(\textbf{n^2}). Каждый раз, проходя по всему массиву, сначала мы сравниваем соседние элементы и если есть необходимость меняем их местами. Этот процесс повторяется, пока при очередном проходе сделана хотя бы одна замена. Предположим, что после \textbf{T} проходов массив уже отсортирован в порядке возрастания, тогда мы говорим, что \textbf{T} является количеством этапов соритовки для заданного массива. Ниже приведен пример. Возьмем за исходный начальный массив "\textbf{5 1} \textbf{4 2 8}" а затем используя описанный алгоритм пузырьковой сортировки проведем его сортировку следующим образом: Первый проход: ( \textbf{5 1} 4 2 8 ) -> ( \textbf{1 5} 4 2 8 ), сравнили первых два элемента и поменяли их местами.( 1 \textbf{5 4} 2 8 ) -> ( 1 \textbf{4 5} 2 8 ), поменяли местами \textbf{5} > \textbf{4}( 1 4 \textbf{5 2} 8 ) -> ( 1 4 \textbf{2 5} 8 ), поменяли местами \textbf{5} > \textbf{2}( 1 4 2 \textbf{5 8} ) -> ( 1 4 2 \textbf{5 8} ), так как два последних элемента упорядочены (\textbf{8} > \textbf{5}), алгоритм не меняет их местами. Второй проход: ( \textbf{1 4} 2 5 8 ) -> ( \textbf{1 4} 2 5 8 ) ( 1 \textbf{4 2} 5 8 ) -> ( 1 \textbf{2 4} 5 8 ), поменяли местами \textbf{4} > \textbf{2} ( 1 2 \textbf{4 5} 8 ) -> ( 1 2 \textbf{4 5} 8 ) ( 1 2 4 \textbf{5 8} ) -> ( 1 2 4 \textbf{5 8} ) После \textbf{T} = \textbf{2} проходов массив уже отсортирован, поэтому мы говорим, что количество проходов алгорима сортировки пузырьком для заданного массива равно \textbf{2}. Петя изучил алгоритм сортировки пузырьком в классе и его учитель задает задания, связанные с ним, как домашнее задание. Учитель предоставил Пете уже осортированный массив \textbf{A} состоящий из \textbf{N} различных целых чисел и утверждает, что он получил его после \textbf{K} проходов алгоримом сортировки пузырьком. Задание: какое количество исходных первоначальных массивов \textbf{A} может существовать, чтобы в итоге получить заданный массив после \textit{\textbf{K }}проходов алгоритма сортировки пузырьком? Результат может быть очень большим, поэтому его необходимо вывести по модулю \textbf{20100713}. \InputFile Входные данные состоят из нескольких тестов. В первой строке задано натуральное число \textbf{T} (\textbf{T} ≤ \textbf{100000}), указывающее количество тестовых случаев. Следующие \textbf{T} строк содержат тестовые данные. В каждой строке находится два целых числа \textbf{N} и \textbf{K} (\textbf{1} ≤ \textbf{N} ≤ \textbf{1000000}, \textbf{0} ≤ \textbf{K} ≤ \textbf{N} - \textbf{1}) где \textbf{N} указывает на размер массива, а \textbf{K} - количество этапов сортировки алгоритмом пузырька. \OutputFile Для каждого тестового случая вывести в отдельной строке ответ на поставленную задачу по модулю \textbf{20100713}. \Note Предположим, что задан массив \{\textbf{a}, \textbf{b}, \textbf{c}\} (\textbf{a} < \textbf{b} < \textbf{c}). Существует \textbf{6} различных вариантов исходного массива: \{\textbf{a}, \textbf{b}, \textbf{c}\}, \{\textbf{a}, \textbf{c}, \textbf{b}\}, \{\textbf{b}, \textbf{a}, \textbf{c}\}, \{\textbf{b}, \textbf{c}, \textbf{a}\}, \{\textbf{c}, \textbf{a}, \textbf{b}\}, \{\textbf{c}, \textbf{b}, \textbf{a}\}, а исходный мы можем получить по разному: \{\textbf{a}, \textbf{b}, \textbf{c}\}: не сортируя, так как массив уже отсортирован. \{\textbf{a}, \textbf{c}, \textbf{b}\}, \{\textbf{b}, \textbf{a}, \textbf{c}\}, \{\textbf{c}, \textbf{a}, \textbf{b}\}: за один проход алгоритма сортировки пузырьком. \{\textbf{b}, \textbf{c}, \textbf{a}\}, \{\textbf{c}, \textbf{b}, \textbf{a}\}: за \textbf{2} прохода алгоритма сортировки пузырьком.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
3
3 0
3 1
3 2
Выходные данные #1
1
3
2