Во время каникул в Санкт-Петербурге Арина посетила выставку художников-импрессионистов. Для полноты восприятия она взяла аудиогид, чтобы не просто рассматривать картины, но и узнавать что-то новое. Выставка представляет собой галерею из n картин, развешанных (по порядку, от первой к n -й) на одной стене музея. Арина хотела один раз пройтись по галерее, от картины с номером 1 1 до картины с номером n , но в её планы вмешались другие любители живописи, стоявшие у некоторых картин. Поэтому, если у картины уже стоял посетитель, Арина пропускала её и шла дальше. Дойдя до конца галереи, она развернулась и продолжила осмотр, пользуясь той же тактикой относительно остальных посетителей, но в этот раз останавливаться только у ещё не просмотренных картин. Таким образом ей пришлось несколько раз пройти от одного конца галереи до другого. Посмотрев последнюю картину Арина продолжила движение в том же направлении и вышла из музея. После культурной прогулки Арина решила посчитать сколько же раз она по галерее. На её удачу в памяти аудиогида сохранилась последовательность треков с номерами картин Арине — по последовательности номеров картин определите, какое минимальное количество раз она вдоль галереи. Входные данные В первой строке содержится целое число n (1≤≤105) ( 1 ≤ n ≤ 10 5 ) — количество картин в галерее. Во второй строке содержится n целых чисел a i (1≤≤) ( 1 ≤ a i ≤ n ) — номера картин в порядке их просмотра по истории аудиогида. Гарантируется, что ≠ a i ≠ a j , если ≠ i ≠ j . Выходные данные Выведите единственное целое число — минимально возможное количество раз, которое Арина вдоль галереи решить ,
//Pascal
const m = 1000
var
arr: array[1..m] of integer;
n,i, j, k: integer;
begin
readln(n);
write ('Исходный массив: ');
for i := 1 to n do begin
readln(arr[i]);
end;
//сортировка методом пузырька
for i := 1 to n-1 do
for j := 1 to n-i do
if arr[j] > arr[j+1] then begin
k := arr[j];
arr[j] := arr[j+1];
arr[j+1] := k
end;
write ('Отсортированный массив: ');
for i := 1 to n do
write (arr[i]:4);
end.
Алгоритм сортировки на классическом языке программирования С
# define SWAP(A,B) {A=A^B;B=A^B;A=A^B;}
void bubblesort(int A[], int n)
{
int i, j;
for(i = n-1 ; i > 0 ; i--)
{ for(j = 0 ; j < i ; j++)
{
if( A[j] > A[j+1] ) SWAP(A[j],A[j+1]);
}
}
}
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016
begin
Writeln(Range(1,100).Select(i->sin(i)*cos(i)).Where(x->x<>0).Average)
end.
Тестовое решение:
-0.00136006072493969
2. А вот так учат писать это же школьные учителя:
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016
var
m:array[1..100] of real;
i,k:integer;
s:real;
begin
s:=0;
k:=0;
for i:=1 to 100 do begin
m[i]:=sin(i)*cos(i);
if m[i]<>0 then begin
s:=s+m[i];
k:=k+1
end
end;
Writeln(s/k)
end.
Тестовое решение:
-0.00136006072493969