1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| xprogrammer |
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
Назовенм последовательность волнистой если для всех кроме первого элемента выполняется: для всех элементов кроме первого и последнего, что либо этот член последовательности больше всех своих соседей, либо меньше.
Например : 12121212121-волнистая а 123321 - нет дана последовательность и надо из неё выделить самую большую волнистую подпоследовательность . Последовательность храниться в массиве помогите хоть алгоритмом. |
![]() ![]() |
| Michael_Rybak |
Сообщение
#2
|
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Идем слева направо по последовательности, и помним, сколько (максимум) последних прочитанных символов удовлетворяют условию "волнистости". А именно:
1. Один символ всегда волнистый. 2. Два символа, только если они не равны, волнистые. 3. n+1 символов - волнистые, если первые n из них - волнистые, и для n-го символа выполняется условие "больше всех своих соседей, либо меньше" Получается алгоритм: 1. Прочитать следующий символ. Считать его первым в искомой подстроке (ПИП) 2. Прочитать следующий символ. Если он равен ПИП, считать его ПИПом и перейти к шагу 2 3. Иначе считать его вторым в искомой подстроке (ВИП). Найден ответ длины 2. 4. Прочитать следующий символ. Если он равен предыдущему прочитанному, считать его ПИПом и перейти к шагу 2 5. Проверить для предыдущего символа (стоящего перед только что прочитанным) условие волнистости. Если оно выполняется, перейти к шагу 4. 6. Иначе запомнить найденный ответ (не включая последний прочитанный символ). Последних два прочитанных символа считать ПИПом и ВИПом соответственно, и перейти к шагу 4. При этом "запомнить найденный ответ" означает не вырезать саму подстроку (подмассив), а просто запомнить индексы первого (ПИП) и последнего элементов в подпоследовательности. Алгоритм получается линейный. |
xprogrammer Волнистая последовательность 3.11.2006 14:38
xprogrammer нет, вы неправильно мепня поняяли. Подпоследовател… 4.11.2006 3:25
Michael_Rybak
Подпоследовательностью последовательности (Xn) я … 4.11.2006 4:42
volvo xprogrammer, а теперь перечитай свой первый пост..… 4.11.2006 3:42
xprogrammer Волнистые: 1 2 1 2 1 2 1 3 2 6 1 8 4
… 4.11.2006 4:04
Reflex Ты помоему не прав биекцию ты непосроишь в последо… 4.11.2006 15:45
lapp
Ты помоему не прав биекцию ты непосроишь в послед… 4.11.2006 16:03
Reflex тогда я не понимаю почему это алгоритм будет работ… 4.11.2006 17:14
Reflex не понела как он будет работать на 1-2-1-2-1-2-1
п… 4.11.2006 19:04
Гость Если честно, не могу врубиться в решение Рыбака - … 4.11.2006 19:37
Michael_Rybak
Если я не прав - скажите, где :)
Прав :) *насви… 4.11.2006 21:21
Reflex program Problem;
{$APPTYPE CONSOLE}
uses
… 4.11.2006 19:44
lapp Reflex, я праввильно понял, что ты выдаешь только … 4.11.2006 20:02
klem4 Что - то вы тут разшлись, может я что не так понял… 5.11.2006 13:57
lapp
может я что не так понял конечно, вот таккой вари… 5.11.2006 16:24
klem4 Именно, я упустил видимо это ?
?
Если да, то и… 5.11.2006 16:26![]() ![]() |
|
Текстовая версия | 5.11.2025 0:06 |