IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Битовые последовательности, Помогите решить задачу
Maksay
сообщение 5.09.2006 18:04
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Андрей Максай

Репутация: -  0  +


Люди, кто любит решать олимпиадные задачи на Pascal'е-помогите решить:
Есть 2 битовых последовательности длины N.
Требуется узнать, можно ли получить из одной
другую посредством переворачивания подпоследовательностей
с четным кол-вом единиц, и если да-то как!
Пример:
011010010 010101010
{011010010
все символы
010010110
с 4 по 7
010101010}
P.S. mad.gif Неделю бъюсь-ничего.Кстати N-до 100.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Michael_Rybak
сообщение 6.09.2006 3:03
Сообщение #2


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


В условии сказано: подпоследовательностей с четным кол-вом единиц.

Это значит, что любой нолик можно перевернуть, правильно? Это ведь подпоследовательность длины 1, с четным количеством (0) единиц.

Тогда идея такая:

1. Заменяем все нолики единичками

2. Если n четное, переворачиваем всю строку, получаем все нули. Если нечетное, то переворачиваем со второго по последний, потом второй превращаем обратно в единицу, потом переворачиваем первые два. Например:

11111
10000 - перевернули 2-5
11000 - перевернули 2-2
00000 - перевернули 1-2

Таким образом, любую строку мы превратили в строку нулей.
А теперь заменяем нужные нули на единицы.

Единственный случай, когда это не работает - это когда первая строка - "1", а вторая - "0". Тогда нельзя сделать "потом *второй* превращаем обратно в единицу", потому что второго нету.

На приведенном примере:

9
100011100
001011001


100011100

Заменяем нули единицами.

2-2: 110011100
3-3: 111011100
4-4: 111111100
8-8: 111111110
9-9: 111111111

Превращаем всё в нули:

2-9: 100000000
2-2: 110000000
1-2: 000000000

Строим то, что нужно:

3-3: 001000000
5-5: 001010000
6-6: 001011000
9-9: 001011001

Ответ:

да
2 2
3 3
4 4
8 8
9 9
2 9
2 2
1 2
3 3
5 5
6 6
9 9


Сообщение отредактировано: Michael_Rybak - 6.09.2006 3:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Coder_perm
сообщение 6.09.2006 6:41
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской
Реальное имя: Антонио

Репутация: -  2  +


Цитата(Michael_Rybak @ 6.09.2006 6:03) *

В условии сказано: подпоследовательностей с четным кол-вом единиц.

Это значит, что любой нолик можно перевернуть, правильно? Это ведь подпоследовательность длины 1, с четным количеством (0) единиц.


ИМХО ты немного не правильно понял условие задачи:

1. Переворачивать, не значит менять 0 на 1 и обратно.
Это значит, что последовательность 110000 перевернется в 000011, а не в 001111.

2. Каждое переворачиваение должно происходить только с четным количеством элементов последовательности, а не общее число перевернутых элементов должно быть четным.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Maksay   Битовые последовательности   5.09.2006 18:04
klem4   Может быть вариант что нам для получения придется ...   5.09.2006 19:58
volvo   В дополнение к предыдущему вопросу: может ли понад...   5.09.2006 20:03
klem4   Volvo, и на твой вопрос ответ судя по всему тоже д...   5.09.2006 20:06
volvo   Тогда есть высокая (очень высокая) вероятность тог...   5.09.2006 20:11
Maksay   Извиняюсь, пример действительно неудачный.Перевора...   5.09.2006 20:34
Malice   У меня вот такой алгоритм получился: uses crt; va...   5.09.2006 23:04
Michael_Rybak   В условии сказано: подпоследовательностей с четным...   6.09.2006 3:03
Coder_perm   В условии сказано: подпоследовательностей с четны...   6.09.2006 6:41
Michael_Rybak   >1. Переворачивать, не значит менять 0 на 1 и о...   6.09.2006 12:03
Michael_Rybak   Надеюсь, теперь я правильно понял условие :) Поня...   6.09.2006 13:53
lapp   Понятно, что преобразования у нас транзитивные и ...   7.09.2006 13:48
Malice   Ну вы и монстры, блин :) Michael_Rybak Алгоритм и...   8.09.2006 13:05
Michael_Rybak   Совсем нет: {$AppType CONSOLE} const MAX...   8.09.2006 15:28
Malice   А ты можешь доказать правильность своего? На оли...   8.09.2006 15:54
Гость   На олимпиадах не требуется доказательство правильн...   8.09.2006 16:11
mlc   Если я перечислю в программе 5 тестовых примеров ...   8.09.2006 17:26
Michael_Rybak   А эту задачу можно сдать на каком-нибудь онлайн ар...   6.09.2006 14:28
volvo   Нет возможности узнать достоверно, что имеется в в...   7.09.2006 14:59
Michael_Rybak   >Найдешь преобразование, переводящее из А в С? ...   7.09.2006 16:12
lapp   > > Найдешь преобразование, переводящее из А...   7.09.2006 23:58
Michael_Rybak   > > > Найдешь преобразование, переводящее...   8.09.2006 12:30
Гость   я нашел тест который не работает через вышеуказанн...   24.12.2010 13:56
Гость   я нашел тест который не работает через вышеуказан...   24.12.2010 13:58
Saken   блин сорри там 9 а не шесть блин ошибся :wacko:...   24.12.2010 15:13


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"