Вопрос 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])
{


