Вадим Ушаков, Нарушить One Definition Rule не получится. Никак. Как не получится, например, писать конструкции языка на русском языке. Ну вот так компилятор устроен, что ему надо писать "for" а не "цикл". Точно также надо чтобы все функции в исполняемом файле имели разные сигнатуры.
Нужно или переименовать одну копию, или убрать лишние из проекта. Возможно надо будет вынести их в отдельную библиотеку, или отключать копии через директивы препроцессора.
Откуда у вас взялось желание использовать одинаково названные функции? Зачем? Почему? Если они идентичные по коду, то зачем вам копии? Если они разные, то как вы решаете, какая из них вызывается в каждом конкретном месте?
Антон Жучков, Вот как раз хотел спросить, а что делать в случае "abcd" и "cdba" - тут есть 2 варианта взять наибольшее LCS размером в 2, но оно или в первой строке раньше, или во второй. Значит у вас надо именно минимизировать вхождение в первой строке.
Антон Жучков, Наверно, что-то не так в вашем внешнем алгоритме. А что если самая длинная последовательность на конце? А последовательность на 1 короче - в самом начале?
Давайте вашу всю задачу, возможно тут надо не LCS вообще.
Если все же вам нужна первая LCS, то надо просто чуть-чуть модифицировать ваш алгоритм. Там, наверняка, где-то в цикле ищется максимальное число и вот там надо знаки правильно посавить (переписывать только если текущее значение строго больше пока найденого максимума).
В зависимости от реализации (порядок проверок, приоритет при совпадении длин) алгоритм действительно может искать самую последнюю или самую первую подпоследовательность.
Alexandroppolus, Так там и Q и M и N - сотни тысяч в задаче. Один запрос или одно число из запроса (потому что ограничение на сумму размеров всех запросов есть в конце условия) надо делать быстрее чем за линию.
zenz, Ну, так же, как у вас InputIterator'ы передаются - обозначте его, ну не знаю, Out. У него в коде функции можно будет делать присвоение и инкрементирование.
logan baby, Ну вам же сказали, делать во второй мапе ключами фамилии. Просто поменяйте местами параметры при запихивании во второй мап. И сделайте его std::multimap, если фамилии могут повторятся.
zenz, Нет, там точно что-то еще написано. Например, какой именно параметр он не может сматчить в шаблоне. Это сообщение компилятора должно вам однозначно намекнуть, что проблема в одном из ваших параметров в шаблонной функции. Конкретно в третьем. Посмотрите, какой тип имеет back_inserter и подумайте, каким образом оно может привестись к вашему параметру?
Откуда вы взяли про объединение? Или это хитрость из разряда "задавая вопрос в интернете, дайте на него неправильный ответ, тогда точно придут толпы разъяренных спорщиков и дадут правильный"?
Igor Borisov, Дело не в стиле. Дело в том, что там похоже меняли код случайным образом, пока на каком-то тесте не заработало. На других не работает, вот и спрашивают.
Нужно или переименовать одну копию, или убрать лишние из проекта. Возможно надо будет вынести их в отдельную библиотеку, или отключать копии через директивы препроцессора.
Откуда у вас взялось желание использовать одинаково названные функции? Зачем? Почему? Если они идентичные по коду, то зачем вам копии? Если они разные, то как вы решаете, какая из них вызывается в каждом конкретном месте?