Контрольная по сортировкам и двумерным спискам
(дополнительный вариант)

1. Задача. Обратный словарь

Ограничение времени: 1 с
Ограничение памяти: 256M
Ограничение размера стека: 64M

Дан массив слов, содержащих строчные латинские буквы.

Упорядочить слова по возрастанию с учётом обратного чтения, т.е. не по начальным, а по конечным буквам (упорядоченный таким образом словарь называется обратным и удобен при изучении особенностей строения конца слов и вообще словообразования, подборе рифм).

Формат входных данных

В единственной строке вводится N (1 ≤ N ≤5 × 104) слов из строчных букв длиной не более 50 символов, разделённых пробелами

Пример

Входные данные Результат работы
window table ten screen table screen ten window

2. Задача. Чётные туда, нечётные сюда

Ограничение времени: 1 с
Ограничение памяти: 256M
Ограничение размера стека: 64M

Дан массив натуральных чисел. Отсортируйте по возрастанию подмассив, состоящий из его чётных элементов. Все нечётные элементы должны остаться на своих местах.

Формат входных данных

В первой строке вводится количество элементов массива N (1 ≤ N ≤ 105). Во второй строке вводится N натуральных чисел, разделённых пробелами.

Пример

Входные данные Результат работы
9
9 8 7 6 5 4 30 20 10
9 4 7 6 5 8 10 20 30

3. Задача. Мин-макс-мин-макс

Дан массив натуральных чисел. Вывести массив, состоящий из тех же чисел, в следующем порядке: сначала минимальное число, затем максимальное, затем второй минимум, потом второй максимум и так далее.

Формат входных данных

В первой строке вводится количество элементов массива N (1 ≤ N ≤ 105). Во второй строке вводится N натуральных чисел, разделённых пробелами.

Пример

Входные данные Результат работы
9
1 5 4 3 6 2 9 7 8
1 9 2 8 3 7 4 6 5

4. Задача. Дружные числа

Ограничение времени: 1 с
Ограничение памяти: 256M
Ограничение размера стека: 64M

Два числа назовём дружными, если их сумма делится на 3 нацело.

По данному массиву натуральных чисел создайте массив, в котором элементы исходного упорядочены по возрастанию количества их друзей в этом массиве. Если у двух элементов одинаковое количество друзей, их первоначальный порядок следования должен быть сохранён. Элемент массива сам с собой дружить не умеет.

Формат входных данных

В первой строке вводится количество элементов массива N (1 ≤ N ≤ 105). Во второй строке вводится N натуральных чисел, разделённых пробелами.

Примеры

Входные данные Результат работы
3
1 2 3
3 1 2
5
3 2 12 1 6
2 1 3 12 6

5. Задача. Кинотеатр

В кинотеатре n рядов по m мест в каждом. В двумерном списке хранится информация о проданных билетах, число 1 означает, что билет на данное место уже продано, число 0 означает, что место свободно. Поступил запрос на продажу k билетов на соседние места в одном ряду. Определите, можно ли выполнить такой запрос.

Программа получает на вход числа n и m. Далее идет n строк, содержащих m чисел (0 или 1), разделенных пробелами. Затем дано число k.

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

Примеры

Входные данные Результат работы
3 4
0 1 0 1
1 0 0 1
1 1 1 1
2
2
3 3
0 1 0
1 0 0
1 1 1
3
0

6. Задача. Заполнение таблицы

Дано число N. Заполните таблицу N × N целыми числами начиная с 1, увеличивающимися квадратами, начиная с левого верхнего угла. Каждую новую сторону квадрата заполняйте числами, начиная сверху (см. пример). Программа получает на вход число N. Выведите заполненную таблицу, отводя на каждое число ровно 4 пробела.

Примеры

Входные данные Результат работы

4
    1    2    5   10
    4    3    6   11
    9    8    7   12
   16   15   14   13

6. 1. Задача. Прямоугольные префиксы

Для решения этой задачи нужно что-то знать о двумерных массивах.

Дана прямоугольная матрица (таблица чисел), содержащая N строк и M столбцов. Для каждого элемента этой матрицы вычислите сумму всех чисел, находящихся левее и выше данного числа, то есть сумму чисел, которые находятся внутри прямоугольника, правый нижний угол которого является данным числом.

Программа получает на вход два числа N и M. Следующие N строк содержат по M целых неотрицательных чисел от 0 до 1000 каждое.

Программа должна вывести другую прямоугольную матрицу, также содержащую N строк и M чисел в каждой строке, построенной по описанному выше правилу.

Решение должно иметь сложность O(N × M). Ограничения: NM ≤ 50000.

Пример

Входные данные Результат работы
3 4
1 2 1 2
2 1 2 1
1 2 1 2
1 3 4 6
3 6 9 12
4 9 13 18

7. Задача. Перестановка таблицы

Дана двумерная таблица N × N, где N — чётное. Разобъём её на четыре квадрата. Переставьте эти четыре квадрата, повернув их по часовой стрелке, не меняя порядок элементов внутри квадратов. Можете сделать это в том же массиве, а можете создать новый массив.

 A   B 
 C   D 
 C   A 
 D   B 

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

Выведите полученную таблицу, разделяя элементы ровно одним пробелом.

Пример

Входные данные Результат работы
4
1 2 3 4
5 6 7 8
9 8 7 6
5 4 3 2
9 8 1 2
5 4 5 6
7 6 3 4
3 2 7 8