Я повторяю это постановку задачи, теперь, когда конкурс завершен (так что это не обман или что-то в этом роде, просто хочу узнать, так как ответы не публикуются, только правильный вывод для заданных входных файлов тестового примера).
Имеется 10 заданных входных данных тестового примера, для которых должны быть представлены соответствующие выходные файлы. Моя первоначальная заявка была реализацией наивного вложенного цикла for пар (начало, конец), отвечающего на вопрос: какова мера волатильности подстроки, начинающейся с индекса start
(отсчитываемой от 0) и заканчивающейся end
(включительно).
Ясно, что для максимальных проблемных пределов 106, O(N2) невыполнимо, поэтому я правильно выполнил только 5/10 тестовых случаев (первый - а попроще - 5, конечно).
Таким образом, я пишу здесь, чтобы узнать мнение толпы о том, как я могу улучшить свой алгоритм, а именно, я подозреваю, что вложенные циклы for (начало, конец) являются основным узким местом для оптимизации (конечно!). пошли по пути попытки сформулировать это как динамическое программирование (DP) для проблемы строк/подстрок, но без особого успеха в придумывании представления состояния и битов перехода, чтобы можно было реализовать DP.
Для простоты справки и чтобы показать, что это не домашнее задание, и я честно старался, моя исходная работа доступна здесь .
Любая помощь очень ценится, даже ссылки на похожие проблемы, для которых я могу найти в Google обучающие сообщения в блогах/примеры решений/редакционный анализ после конкурса.