Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2014, 17:15   #1
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
Радость Непрерывная неубывающая последовательность чисел (TurboPascal)

В наборе чисел найдите непрерывную неубывающую последовательность чисел
максимальной длины. Если подходящих последовательностей несколько, выведите первую из
них. -maxint ≤ a ≤ maxint.

Формат ввода: первая строка: n ≤ 300 000. Вторая строка: элементы набора чисел.
Формат вывода: искомая последовательность.

input.txt
7
5 1 2 3 4 3 7

output.txt
1 2 3 4
VladKB1 вне форума Ответить с цитированием
Старый 12.06.2014, 21:44   #2
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

а у тебя есть какие-нибудь мысли? или вообще не представляешь, как это решать?
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 12.06.2014, 21:58   #3
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от SlavaSSU Посмотреть сообщение
а у тебя есть какие-нибудь мысли? или вообще не представляешь, как это решать?
Решить смогу , но по времени не пройдёт 1 тест-1 секунда.

Скоро выложу код.
VladKB1 вне форума Ответить с цитированием
Старый 12.06.2014, 22:08   #4
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

эту задачу надо решать жадно. т.е. пусть мы уже что-то набрали и стоим в индексе idx, тогда если a[idx + 1] >= a[idx], т.е. мы можем еще добавить в конец один эдемент, то нам никогда не выгодно его не добавлять, поэтому добавим его в конец. если же неубываемость нарушается, то нам нет смысла смотреть на предыдущие элементы, т.е. надо начинать новую последовательность
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 12.06.2014, 22:46   #5
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
Вопрос

Цитата:
Сообщение от SlavaSSU Посмотреть сообщение
эту задачу надо решать жадно. т.е. пусть мы уже что-то набрали и стоим в индексе idx, тогда если a[idx + 1] >= a[idx], т.е. мы можем еще добавить в конец один эдемент, то нам никогда не выгодно его не добавлять, поэтому добавим его в конец. если же неубываемость нарушается, то нам нет смысла смотреть на предыдущие элементы, т.е. надо начинать новую последовательность
Спасибо за совет но я пытался, пытался не получается. Можете расписать алгоритм действий?
VladKB1 вне форума Ответить с цитированием
Старый 12.06.2014, 22:57   #6
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

l := 1; //1-ая нерассмотренаая ячейка
r := 1;
anslen := 0;
ansl := 0;
ansr := 0;
while(l <= n) do begin
r := l;
//начиная с этой позиции идем вправо пока можем
while(r + 1 <= n && a[r + 1] >= a[r]) do
inc(r);
// пробуем обновить ответ
if(r - l + 1 > anslen) then begin
anslen := r - l + 1;
ansl := l;
ansr := r;
end;

//последняя рассмотренная позиция была r, поэтому новая ерассмотренная поцизия r + 1;
l := r + 1;
end;

// теперь в ansl и ansr хранятся индексы ответа
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 12.06.2014, 23:03   #7
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от SlavaSSU Посмотреть сообщение
l := 1; //1-ая нерассмотренаая ячейка
r := 1;
anslen := 0;
ansl := 0;
ansr := 0;
while(l <= n) do begin
r := l;
//начиная с этой позиции идем вправо пока можем
while(r + 1 <= n && a[r + 1] >= a[r]) do
inc(r);
// пробуем обновить ответ
if(r - l + 1 > anslen) then begin
anslen := r - l + 1;
ansl := l;
ansr := r;
end;

//последняя рассмотренная позиция была r, поэтому новая ерассмотренная поцизия r + 1;
l := r + 1;
end;

// теперь в ansl и ansr хранятся индексы ответа
Большое спасибо! а что это значит && ?
VladKB1 вне форума Ответить с цитированием
Старый 12.06.2014, 23:10   #8
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

лол. я на паскале давно не писал! это логическое и.
в с++ &&
в паскале and
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 12.06.2014, 23:11   #9
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от SlavaSSU Посмотреть сообщение
лол. я на паскале давно не писал! это логическое и.
в с++ &&
в паскале and
понятно ))
VladKB1 вне форума Ответить с цитированием
Старый 12.06.2014, 23:22   #10
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Ну вроде бы готово только индексы у меня 6 и 7 ((

Код:
var
 n,i,l,r,z,x,c: longint;
 a: array [1..1000] of longint;
begin
 assign(input,'input.txt');
 reset(input);
 assign(output,'output.txt');
 rewrite(output);

 read(n);
 for i:=1 to n do read(a[i]);

 l:=1;
 r:=1;
 while (l <= n) do
 begin
  r:=l;
  while (r+1 <= n) and (a[r+1] >= a[r]) do inc(r);
  if (r-l+1 > z) then
  begin
   x:=l;
   c:=r;
  end;
  l:=r+1;
 end;
 for i:=x to r do write(a[i],' ');
end.

Последний раз редактировалось VladKB1; 12.06.2014 в 23:30.
VladKB1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана непустая последовательность целых чисел. Найти: Сумму чисел, больших числа x и количество всех чётных чисел maksim97maksim Паскаль, Turbo Pascal, PascalABC.NET 1 09.04.2014 13:59
Дана последовательность целых чисел a1, a2, …an. Образовать новую последовательность, выбросив из исходной, те члены, которые равн Мария74 C++ Builder 2 04.12.2013 23:09
Дана непустая последовательность вещественных чисел, оканчивающаяся числом 1000. Последовательность является неубывающей. fanatloko Паскаль, Turbo Pascal, PascalABC.NET 1 23.06.2013 14:25
Дана последовательность вещественных чисел. каждая пара чисел задает границы отрезка. Найти количество целых чисел на отрезках 'studentka' Помощь студентам 6 30.11.2011 18:35
С\С++ Дана последовательность чисел. Найти количество различных чисел в этой последовательности yuliyayuliya Помощь студентам 1 14.04.2011 06:30