Задание предложенное на дистанционной олимпиаде по информатике 2014 года.
Радиотелескоп фиксирует некоторый дискретный радиосигнал. Каждое значение сигнала представляет собой целое положительное число от 1 до 108. Количество измерений N может быть очень большим (3 <= N <= 106). Ваша задача провести первичную фильтрацию сигнала от импульсных помех согласно следующему алгоритму – если какое-либо значение сигнала более чем в 2 раза больше, чем среднее арифметическое из значения этого сигнала и двух его соседних значений (одно – слева, другое – справа), то такое значение сигнала считается помехой и удаляется из последовательности. В результате должна получиться последовательность, в которой нет помех. Если результирующая последовательность имеет нулевую длину - вывести "0".
Входные данные – в первой строке вводится число N, далее в N строках по одному значению сигнала в каждой строке.
Выходные данные – по одному значению отфильтрованного сигнала в каждой строке.
Примеры:
4
1
1000
1
1
|
1
1
1
|
4
1
1000
100
2
|
1
2
|
4
1
1
1
1000
|
1
1
1
|
5
1
10
100
1000
1
|
1
1
|
Решение :
program n1;
uses crt;
var i,n,a,b,c,m,flag:integer;
f:text;
sr:real;
begin
flag:=0;
assign (f,'input.txt');
reset(f);
readln(f,n);
writeln(n);
readln(f,a);
readln(f,b);
readln(f,c);
if a<((a+b)/2)*2 then begin
writeln (a); // первый элемент
flag:=1;
end;
sr:=((a+b+c)/3)*2;
if b<sr then begin
writeln (b); // второй элемент
flag:=1;
end;
while not eof(f) do begin
a:=b;
b:=c;
readln(f,c);
sr:=((a+b+c)/3)*2;
if b<sr then begin
writeln (b); // остальные до предпоследнего
flag:=1;
end;
end;
if c<((c+b)/2)*2 then begin
writeln (c); // предпоследний
flag:=1;
end;
close (f);
if flag=0 then writeln(flag);
end.
|