1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| mihas |
7.09.2004 16:01
Сообщение
#1
|
|
Гость |
ЗДравствуйте ребята программеры! Вот на днях мне препод дал задачу (сказал, что с какой то олимпиады). Условие таково:
Вводится строка из 0 и 1 (причем строка должна быть не более 1000 000 символов). Затем вводится начальная позиция (min) и конечная позиция(max). Вот и требуется узнать есть ли между заданными позициями (включая их самих) одинаковые числа, т.е. только 0 или только 1. С первого взгляда задача очень проста, но там есть одно условие: нужно, чтобы программа выполнялась не более двух секунд. Т.е. нужно придумать очень быстрый алгоритм проверки в заданном интервале. У меня же пока что получается 10 секундная прога, помогите сделать 2 секундную. Заранее благодарен. P.S.: я сделал прогу проверкой в лоб, т.е. берется начальный элемент (т.е. st[min], где st - это мой массив из 0 и1) строки и затем проверяется с каждым элементом до конечного (т.е. до st[max]) |
![]() ![]() |
| xds |
8.09.2004 0:40
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Я попробовал такой "предельно тупой" код:
Код 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.
|
mihas 0 и 1 7.09.2004 16:01
BlackShadow Я бы посоветовал удваивать интервал. Т. е. сначала... 7.09.2004 20:03
zx1024 Все зависит от вида хранения данных (побитово или ... 7.09.2004 22:11
Atos Я бы посоветовал открывать файл не как текстовой, ... 9.09.2004 12:01
xds Кстати, Text использует буферизацию по умолчанию, ... 9.09.2004 18:07
BlackShadow Я уже где-то кому-то говорил, что оптимальный разм... 9.09.2004 18:21
pascal65536 А если хранить каждый 0 или 1 в массиве, пофигу ка... 11.09.2004 10:57
BlackShadow Вот только счётчик в таком случае надо 4-ёх байтны... 11.09.2004 16:38![]() ![]() |
|
Текстовая версия | 9.12.2025 3:29 |