impressive17, Ну тупо, если в переменной записано 123, то мы считаем, что там 1.23. Если там записано 1234567, мы считаем, что на самом деле там 12345.67. Грубо говоря, вы храните в переменной не рубли, а копейки. Тогда целое значение в копейках соответствует фиксированной запятой для рублей. Количество знаков после запятой вы можете поставить любым.
Надо только аккуратно 2 таких переменных перемножать или делить друг на друга.
У вас в примере все коэффициенты целые. Откуда у вас там вообще запятая вылезла?
Денис Аникин, Спросите у сокурсников, может все-таки, давали где-то списки? Напишите учителю, что "как так-то!?". Если не будет реакции, ругайтесь на него на кафедре, в деканате. Только трижды сначала убедитесь, что списки не давали на паре, которую вы пропустили, или в качестве ДЗ.
Проблема только в длинной конструкции? Никак без нее. FirstLib:: не надо, так как вы сделали using namespace FirstLab. А вот назвнаие класса и метода писать придется всегда.
Еще, не надо включать через include cpp файл. Включайте хедер (.h файл), в котором есть только декларация классов и функций. Потом собирайте какой-нибудь системой сборки, типа cmake (есть даже под винду). Или руками собирайте из всех файлов объектники передав g++ ключ -c. И потом линкуйте объектники передав их все g++.
Никита, Ваш алгоритм на тесте из всех букв "a" будет работать за n*m.
Можно попробовать не проверять equals и надеятся, что у вас достаточно хороший хеш. Но может не повезти. Если будут неправильные ответы, то можно будет попробовать поменять X, или еще лучше добавить хешей, с другим значением X и проверять на равенство все хеши.
Еще, я бы посоветовал реализовать другой алгоритм поиска подстроки, например КМП или Бойера-Мура.
Никита, Надо хеш везде считать по модулю. Можно считать по модулю 2^32 - для этого все переменные и константы в вычислении хеша должны быть unsigned int. Там тоже будет переполнение, но оно безобидное и будет как будто вы берете все по модулю 2^32.
Во-первых, конструкция c.index путает. Код будет и короче и понятнее, если сделать тупо if else вместо min. В одной ветке берем i-1, в другой - i-2.
Во-вторых, вместо хранения списка посещенных цветков, вам надо для каждого цветка запомнить, какой из двух предыдущих дал минимум. И потом в цикле с последнего цветка надо пропрыгать по этим указателям, чтобы получить путь.
Поскольку вы на каждой итерации по i создаете список - ваше текущее решение работает за квадрат.
Восстановление ответа в конце, как я сказал, будет в итоге работать за линию.
Вася Покрышкин, Там 100% измерения L2=L3=7 должны быть. Значит у вас измерения не под 120 градусов идут в компасе.
Смотрите, если там взять 120 градусов между измерениями и повернуть эллипс на 90 градусов, то длина L2 будет (cos(120)*4)^2+(sin(120)*2)^2 и это даст 7. А корень, соответственно 2,64575. Перепроверьте, что измерения стоят точно.
функция, которую я написал, ищет наименьшее количество пыльцы.
Вы же сами сказали, что она не работает на каких-то тестах. Значит она не ищет наименьшее количество пыльцы, а только пытается это сделать. У вас нет в коде какой-то простой ошибки, типа +1 где-то забыли. Его весь надо переписать с нуля.
Все, что вы говорите дальше - это не ДП. Это какой-то карго-культ. Вы, наверно, видели кучу программ реализующих ДП и как-то по подобию пытаетесь сделать. Но без понимания.
Еще раз, я призываю вас формализовать решение. Без этого вы не поймете решение задачи.
Перечитайте мой предыдущий комментарий. Что у вас функция DP(i) должна означать, если i - номер цветка, а в задаче вам надо минимизировать общее количество пыльцы полученной кузнечиком?
GeloBer, Вы знаете, как работает динамическое программирование? Без этого понимания вы задачу никогда не решите.
Минутка теории. При составлении решения через ДП надо определить 3 вещи:
1) Функция ДП. Назовем ее DP(). Эта функция дает ответ на какую-то задачу, заданную какими-то параметрами. Ее надо описать словами.
Потом мы сводим эту задачу к подзадачам, которое есть та же самая задача, но с другими параметрами. Это и будет рекуррентное соотношение.
Подсказка - в этой задаче параметр будет один - номер цветка/количество цветков от начала.
2) База. Для каких-то параметров надо задать значение функции DP(). Подсказка - тут надо задать DP(0).
3) Ответ. Наша функция может иметь больше параметров, чем есть в изначальной задаче. Поэтому надо указать, какие параметры DP дают ответ. В вашем случае ответом будет DP(n).
Опишите эти элементы и мы с вами сможем понять, почему ваш код делает что-то другое.
Вася Покрышкин, Я только что перепроверил все выкладки и подставил пример эллипса, если первое измерение делать вдоль большой оси. Все совпадает. Не уверен про ваш Компас.
Можете в вашей программе взять эллипс с фиксированными радиусами (скажем, 4 и 2) и пустить одно из измерений точно вдоль радиуса? Должно быть L1=16, L2=L3=7. Подсчитайте площадь, она должна быть 8Pi = 25.13....
im_noob, Смотрите. Вам даны какие-то множества A,B,C с графиками. И вам надо подсчитать какую-то формулу. Расставьте в формуле скобки. Каждая скобка - результат каких-то операций - это тоже множество и у него тоже есть график. Решение вашей задачи - построить графики для всех частей выражения шаг за шагом, пока не получите график для всего выражения. Как, например, когда вам надо посдcчитать (1+3)*2, вы считаете 1+3 = 4. Потом 4*2 = 8. Но вместо чисел тут - графики.
Операции на графиках. Не X - это значит график X надо отразить по вертикали вдоль линии Y=0.5.
Формулы U и пересечения у вас в вопросе написаны: максимум и минимум.
Надо на новом графике начертить оба графика вместе. Лучше разными цветами, если вам сложно понять. Потом из этих графиков надо взять верхние (для U) линии (для пересечения берете нижние). Тупо: где красный цвет выше синего, оставляем красный. Где синий выше красного, оставляем синий. Оставшаяся линия и будет графиком для результата операции.
Надо только аккуратно 2 таких переменных перемножать или делить друг на друга.
У вас в примере все коэффициенты целые. Откуда у вас там вообще запятая вылезла?