C. Анализ рейтинга
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
В этом году третий раз одна известная компания проводит соревнование по программированию искусственного интеллекта для игровых стратегий. В этот раз участникам предложили написать искусственный интеллект для управления командой хоккеистов. После того, как стратегия была запрограммирована, Вася отправил ее в систему. Проведя ряд тестовых боев, она попала в песочницу и начала сражаться со стратегиями других участников. У каждого участника песочницы есть свой рейтинг, который показывает успешность отправленного решения. После каждого системного сражения он может измениться. Все колебания рейтинга можно увидеть на персональной странице участника в виде графика. Анализировать данные — скучное и утомительное занятие, к тому же Вася занят написанием очередной версии своей стратегии. Но ему очень хочется узнать наиболее удачный и наиболее провальный период выступления своего искусственного интеллекта. Удачным периодом Вася считает такой период, когда рейтинг не понижался, а провальным, соответственно, когда рейтинг не рос. Наиболее удачным периодом Вася считает такой удачный период, на котором произошел наибольший рост рейтинга, а наиболее неудачным считает такой период, на котором произошло наибольшее падение. Помогите Васе по исходным данным найти изменения рейтинга за эти периоды.
Формат ввода
В первой строке входного файла записано целое число N (1 ≤ N ≤ 105) — количество данных. Во второй строке через пробел записаны N целых неотрицательных чисел, не превосходящих 109 — величина рейтинга после каждой игры в хронологическом порядке.
Формат вывода
В выходной файл выведите два числа — на сколько вырос рейтинг за наиболее удачный период и на сколько упал за наиболее провальный.
Пример 1
Ввод
1 0
Вывод
0 0
Пример 2
Ввод
10
110 61 31 1 95 47 37 34 10 119
Вывод 109 109
Ответы
Ответ:
Python 3.6
n = int(input())
a = [int(i) for i in input().split()]
up, now, max_, min_ = False, 0, 0, 0
if n == 1:
print('0 0')
else:
for i in range(1, n):
if a[i - 1] < a[i]:
if not up:
up = True
now = 0
now += a[i] - a[i-1]
if now > max_:
max_ = now
if a[i-1] > a[i]:
if up:
up = False
now = 0
now += a[i-1] - a[i]
if now > min_:
min_ = now
print(max_, min_)
PascalABC.NET 3.5.1
Program c_contest;
var Data: array of longword;
i, n, count, max, min, now: longword;
up: boolean;
F: textfile;
begin
Assign(F, 'input.txt');
Reset(F);
readln(F, n);
SetLength(Data, n);
for i := 0 to n-1 do
begin
read(F, Data[i]);
end;
Close(F);
if n = 1 then write('0 0')
else
begin
for i := 1 to n-1 do
begin
if Data[i-1] < Data[i] Then
begin
if not up Then
begin
up := True;
now := 0;
end;
now := now + (Data[i] - Data[i-1]);
if now > max Then max := now;
end;
if Data[i-1] > Data[i] Then
begin
if up Then
begin
up := False;
now := 0;
end;
now := now + (Data[i-1] - Data[i]);
if now > min Then min := now;
end;
end;
write(max, ' ',min);
end;
end.
Объяснение:
По коду видно