Вопрос 2 (30 баллов)

Даётся целочисленная матрица NxN. Две квадратные под-матрицы назовём "идентичными при повороте" (ИПВ) если все их (соответствующие) элементы равны, или это становится верно при повороте одной из них на 90, 180 или 270 градусов.

Например, в следующей матрице 5x5 помеченные под-матрицы ИПВ, поскольку если одну из них развернуть на 90 градусов, они становятся равны по элементам.

Ещё один пример: выделенные подматрицы равны при повороте на 180 градусов

пункт 1 (10 баллов)

Напишите функцию

int is_identical(int a[N][N], int x1, int y1, int x2, int y2, int k)

Принимающую матрицу а величиной NxN, и две матрицы kxk (для каждой даны индексы левого верхнего элемента).

Функция вернёт 0 если данные подматрицы ИПВ (т. е. равны), иначе - вернёт 1.

Требуется сложность по времени - , по дополнительной памяти - .

Дано, что ввод в функцию исправен (т. е. подматрицы целиком содержатся в матрице), а также, что N определён как константа #define.

int is_identical(int a[N][N], int x1, int y1, int x2, int y2, int k)

{

пункт 2 (10 баллов)

Напишите функцию

int find_identical(int a[N][N], int k)

принимающую матрицу а и целое число k, и проверяющую имеются ли в а две (по крайней мере) подматрицы ИПВ (не полностью пересекающиеся, естевственно, любая подматрица ИПВ сама с собой) размером kxk. Если таки подматрицы имеются, функция возвращает функция возвращает 0, иначе 1.

Требуется сложность по времени, по дополнительной памяти.

int find_identical(int a[N][N], int k)

{

пункт 3 (10 баллов)

Напишите функцию

int max_identical(int a[N][N])

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

Требуется сложность по времени , по дополнительной памяти - .

int max_identical(int a[N][N])

{