![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
mihas |
![]()
Сообщение
#1
|
Гость ![]() |
ЗДравствуйте ребята программеры! Вот на днях мне препод дал задачу (сказал, что с какой то олимпиады). Условие таково:
Вводится строка из 0 и 1 (причем строка должна быть не более 1000 000 символов). Затем вводится начальная позиция (min) и конечная позиция(max). Вот и требуется узнать есть ли между заданными позициями (включая их самих) одинаковые числа, т.е. только 0 или только 1. С первого взгляда задача очень проста, но там есть одно условие: нужно, чтобы программа выполнялась не более двух секунд. Т.е. нужно придумать очень быстрый алгоритм проверки в заданном интервале. У меня же пока что получается 10 секундная прога, помогите сделать 2 секундную. Заранее благодарен. P.S.: я сделал прогу проверкой в лоб, т.е. берется начальный элемент (т.е. st[min], где st - это мой массив из 0 и1) строки и затем проверяется с каждым элементом до конечного (т.е. до st[max]) |
![]() ![]() |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я попробовал такой "предельно тупой" код:
Код program _0or1; var f: Text; c, c0: Char; Min, Max, i: LongInt; begin Assign(f, 'input.txt'); Reset(f); Readln(f, Min, Max); for i := 1 to Min do Read(f, c0); for i := 1 to Max - Min do begin Read(f, c); if c <> c0 then begin Writeln('Нет'); Close(f); Exit; end; end; Close(f); Writeln('Да'); end. Будучи откомпилирован на BP 7.0 и запущен на AMD K6-2 300 MHz он справляется с самым сложным случаем (1000000 проверок) за ~0.5 с. Компиляция с помощью FP дает примерно такой же результат. А может предельно тупой я сам: не смог разобраться в условии задачи... -------------------- The idiots are winning.
|
![]() ![]() |
![]() |
Текстовая версия | 22.06.2025 2:31 |