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