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

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

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

> 0 и 1, Нужно узнать есть ли одинаковые цифры.
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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