am1x icon

p26_v3u.pas

am1x | PRO | 08/10/21 05:14:29 PM UTC | 0 ⭐ | 11328 👁️ | Never ⏰ | []
Pascal |

2.75 KB

|

None

|

0 👍

/

0 👎

{В текстовом файле записан набор натуральных чисел, не превышающих 10^9.
Гарантируется, что все числа различны. Необходимо определить, сколько в наборе
таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле,
и чему равно наибольшее из средних арифметических таких пар. Первая строка
входного файла содержит целое число N — общее количество чисел в наборе.
Каждая из следующих N строк содержит одно число.
В ответе запишите два целых числа:
сначала количество пар, затем наибольшее среднее арифметическое.}
 
// Вывод : 15 и 976339247
program p27;
uses SysUtils, DateUtils;
 
const NM = 5000;
type TArray = array[1..NM] of integer;
 
 
var
    n, k, t, s: integer;
    ar : TArray;
 
    count_pair : integer;
    max_average : integer;
    average : integer;
 
    //Для замера времени выполнения
    t0, t1 : TDateTime;
    time_execution : real;
 
procedure input_data(var ar: TArray; var n: integer);
var
    k: integer;
    f: text;
begin
    Assign(f, '26.txt');
    Reset(f);
    readln(f, n);
    assert((0 <= n) and (n <= NM));
 
    for k := 1 to n do begin
        readln(f, ar[k]);
        assert ((0 < ar[k]) and (ar[k] <= 1000000000));
    end;
    Close(f);
end;
 
 
// Обычная сортировка
procedure bsort(var ar: TArray; n: integer);
var
    i, j, jmax  : integer;
    t : integer;
begin
    for i := 1 to n do begin
        jmax := n - i;
        for j := 1 to jmax do begin
            if (ar[j] > ar[j + 1]) then begin
                t := ar[j + 1];
                ar[j + 1] := ar[j];
                ar[j] := t;
            end;
        end;
    end;
end;
 
 
begin
    t0 := Now;
    input_data(ar, n);
    bsort(ar, n);
 
    max_average := 0;
    count_pair := 0;
 
    for k := 1 to n do begin
        if (ar[k] mod 2 <> 0) then
            continue;
        s := k + 1;
        for t := k + 1 to n do begin
            if (ar[t] mod 2 <> 0) then
                continue;
            average := (ar[t] + ar[k]) div 2;
            while (ar[s] < average) do
                inc(s);
            if (ar[s] = average) then begin
                inc(count_pair);
                if (average > max_average) then
                    max_average := average;
            end;
        end;
    end;
 
    t1 := Now;
    time_execution := MillisecondsBetween(t0, t1) * 1e-3;
 
    writeln('N = ', N);
    writeln(' Количество пар из четных чисел, ср.ариф. которых есть в наборе: ', count_pair);
    writeln(' Наибольшее среднее арифметическое: ', max_average);
    writeln;
    writeln('Время выполнения = ', time_execution:8:3, ' сек');
end.
 
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎