Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много

раз подряд, после чего из получившейся строки взяли подстроку и дали вам. Ваша задача определить минимально возможную длину исходной строки S.

Входные данные
На вход программы поступает строка, которая содержит только латинские буквы, длина строки не превышает 100000 символов.

Выходные данные
Требуется вывести одно число – ответ на вопрос задачи.
Попробовал решить через полиномиальные хэши:
1) Посчитал хэши по префиксам
2) В цикле беру префиксы и суффиксы, сравниваю их за O(1)
Код задачи: https://paste.ofcode.org/tqvtRWT4CUUrMwDduFhr5B
Но кажется в коде какой-то логический косяк, хотя он в принципе проходил похожу задачу на литкоде: https://leetcode.com/submissions/detail/1102264111/

Не подскажите в чем тут может быть косяк?

10 ответов

34 просмотра

как минимум ошибка в предположении, что длина S должна делить длину строки на входе

Αλeksandr- Автор вопроса
Vladislav 🇺🇸🚜
как минимум ошибка в предположении, что длина S до...

Вот тут не могу согласиться. https://paste.ofcode.org/5GFZTbJ39D3kwx4xvVixKh size_t solve(const string &s) { vector<uint64_t> p_pow(s.length()), hashes(s.length()); compute_hashes(s, p_pow, hashes); size_t cycle_len = s.length(); for (size_t k = 1; k < s.length(); ++k) { if (substring_eq(p_pow, hashes, 0, k, s.length() - k)) { cycle_len = k; break; } } return cycle_len; } В итоге нашел более правильную версию генерации хешей

Αλeksandr
Вот тут не могу согласиться. https://paste.ofcode....

так в этом решении и нет проверки "if (n % i == 0)"

Αλeksandr- Автор вопроса
Vladislav 🇺🇸🚜
так в этом решении и нет проверки "if (n % i == 0)...

А, ты про это условие. Забыл его убрать из пасты, без него запускал

А это не про fft задача?

Vladislav 🇺🇸🚜
про кмп

Ну, я бы решал через fft для каждого символа...

Kotomord
Ну, я бы решал через fft для каждого символа...

как сделать из решения в 10 строчек - решение в 300 (и упавшее по TL)

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Здравствуйте. Мне надо найти Kth Smallest Sum of Two Sorted Arrays за O(k log k). Например, если A = {1, 2, 3}, а B = {2, 3, 4}, то A + B = {3, 4, 5, 4, 5, 6, 5, 6, 7}, тогда...
Степан
9
Карта сайта