longclaps, А теперь введите 90000. Уже будет работать почти дольше секунды. Это решение квадратичное, когда как суффиксные алгоритмы будут линейные. Но, да, надо было сказать сотни тысяч, вместо десятков. Так было бы надежнее.
Александр Фандеев, Нужен полный текст задачи. По одному только скриншоту примера входных и выходных данных ничего не понятно. Может надо через один символ # внутри ставить, если есть место. А может, надо полный квадрат размера N-4 на N-4 заполнить, оставив узкий коридор между ним и внешним квадратом. А может надо N/2 вложенных квадратов нарисовать. А может N=5 единственный особый случай.
Они там пытаются всю кривую из прямых отрезков покрыть одной кривой. Если не получается, то разбивают на 2 части по самой далекой точке от кривой и делают рекурсивно две половины.
Кривая строится не по 4-м точкам, а по двум концам и касательным. Касательные берутся прямо из крайних отрезков.
Если кривая задана не набором пикселей, а отрезками - то так проще, да.
Nazarko03, Если вы смогли написать алгоритм каратсубы, исправить вывод должно быть тривиальной задачей. Никаких алгоритмов или трюков тут нет. Посмотрите на функцию Out. Сколько итераций она делает? А сколько должна? Добавьте один цикл и измените границы у существующего. Больше подсказок давать не буду.
EternaLGreeD, Только один совет - сформулируйте четко в голове, а лучше вообще запишите - что делает функция. Какие параметры что означают, что за результат. Потом при написании все как-то понятнее. Вот пример из задачи. Функция распаковывет кусок строки начиная с заданного символа до выхода из текущего уровня скобок и возвращает, где текущий уровень кончается.
Когда есть такая формулировка - рекурсивные вызовы понятны. Вот просто символы мы циклом распаковываем, а если встречаем '(', то вызываемся рекурсивно. Так можно рассуждать о функции вообще не параясь о рекурсивных вызовах. Представьте, что в теле не рекурсивные вызовы, а вызвыается другая функция, которую даже не вы писали. Просто она что-то как-то делает. И вот ваша функция должна делать что-то опираясь на нее. не надо думать про дерево рекурсивных вызовов и т.д. Уже потом надо прикинуть, а когда рекурсия кончится, и что нельзя вызывать с теми же параметрами по кругу. Но обычно это все тривиально - какой-то параметр только уменьшается или увеличивается.
EternaLGreeD, Можно возвращать часть значений через reference параметры.
Например, можно возвращать только индекс, а саму строку собирать в каком-то stringBuilder-е который передается в параметре. Так будет эффективнее всего.
Или создать новый класс с двумя значениями и возвращать его. Или использовать какой-то уже встроенный класс для группировки нескольких значений в один класс. Pair, например.
fjaerj12, Ну, идея правильная. Каких-то ошибок в реализации я не вижу. Перепроверьте, что отправляете ту задачу. Попробуйте инициализировать минимумы не 101, а rows, columns (на случай если там тест не по условию большой).
fjaerj12, модуль - это %. Деление по модулю. Объедините 2 цикла (ввод и поиск границ) тогда никаких делений не надо. i и j будут номерами строки и столбца.
Griboks, А чем не подходит вариант одногократного вещественного и двух комплексных корней? Потому что трехкратный корень у такой квадратичной функции, очевидно, никогда не существует.
Никита Подосёнов, Если бы вы дали a,b,c,d нормальные имена, то ошибка была бы очевидна. Один из них максимальный элемент, другой второй наибольший. Третий - минимальный и потом, d - второй минимальный. Должно выполнятся a>=b, c<=d. Именно тогда работает подход сравнить с a, потом с b, и сравнить с c, потом с d.
У вас сортировка при инициализации не в том порядке для a, b. Вы добавили какой-то фикс, но вам повезло, что он сработал на тестах.