Задача D. Сравнение каталогов

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:test.db   Ограничение памяти:256 Мб
Выходной файл:test.log  

Условие

Для поддержания структуры файловой системы с иерархической организацией каталогов используется база данных специального вида.

Информация об имеющихся в наличии файлах и каталогах содержится в таблице ITEMS:

ROWI INTEGER PRIMARY KEY, NAME CHAR(255) NOT NULL, TYPE BOOLEAN NOT NULL, ... ;

Здесь поле TYPE может принимать одно из следующих значений: 0 — регулярный файл; 1 — каталог.

В свою очередь, информация о связях между элементами хранится в таблице LINKS:

ROWI INTEGER PRIMARY KEY,
ROOT INTEGER REFERENCES ITEMS(ROWI), — ссылка на родительский каталог;
ITEM INTEGER REFERENCES ITEMS(ROWI); — ссылка на внутренний элемент.

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

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

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

При этом существование двух таких подкаталогов коллизией не считается.

Каталоги, не привязанные к какому либо родителю, считаются корневыми.

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

В качестве ответа нужно вывести таблицу из трех столбцов:
ROWI первого каталога,
ROWI второго каталога,
число коллизий.

Результат выборки должен быть отсортирован в порядке возрастания по первым двум столбцам.
При этом значения в 1-м столбце должны быть строго меньше, чем во втором.
Записи с нулевым числом коллизий в выборку не добавляются!

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.

Имена файлов и каталогов состоят из цифр и букв латинского алфавита,
при этом заглавные и строчные символы неразличимы между собой.

Гарантируется, что в БД отсутствуют циклические зависимости,
а каждый элемент имеет не более одного предка.


0.089s 0.015s 15