Подойдет любой online judge.
Спасибо.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Подойдет любой online judge.
Спасибо.
Задача:
Есть таблица некоторых критериев, которая имеет следующий вид:
A1 A2 ... A40
B1 B2 ... B40
...
Количество строк может быть около 40000.
Значение каждой ячейки -- произвольная строка (до 256 символов). Также есть специальное значение -- "*" (зведочка).
Теперь есть запрос:
Z1 Z2 ... Z40
Значения полей запроса аналогичны по структуре ячейкам таблицы, включая специальное значение.
Проверка запроса: надо найти среди строк исходной таблицы максимально совпадающую со значениями запроса. Специальное значение "*" либо в запросе, либо в таблице, означает совпадение в данной ячейке вне засимости от значения, с которым сравнивают.
Например:
XYZ GBP 123 * [все значения -- *] *
XYZ USD 123 * [все значения -- *] *
XYZ USD * * [все значения -- *] *
* * * * [все значения -- *] *
Запрос:
XYZ USD 567 * [все значения -- *] *
Ответом должна быть строка номер 3.
При банальном подходе можно просто заранее отсортировать строки таблицы по убыванию количества конкретных значений, и уже для каждого запроса проверять посрочно до первого удачного совпадения. Получается 40000*40 сравнений (не будем учитывать время сравнения самих ячеек).
Может тут как-то можно ускорить, используя результаты предыдущей строки? Например, обработав строку 2, мы знаем, что первые два поля уже совпадают, и может быть их можно уже не сравнивать... Можно индекс какой построить. Ограничения на память особых нет.
Можно даже сгенерить некий код-парсер, которых будет представлять логику конкретной исходной таблицы. Вот только вопрос, в чем должна быть идея этого парсера.
А было бы возможно подключить еще один язык - Go?
Название |
---|