Помогите решить задачу на питоне. Макс любит играть в боулинг! Но,

SEO эксперименты, продвижение и монетизация сайтов, интернет-маркетинг, заработок в сети



RSS Feed Twitter!
Следи за экспериментами:
По почте или RSS

Дата публикации:

Помогите решить задачу на питоне. Макс любит играть в боулинг! Но,


Помогите решить задачу на питоне. Макс любит играть в боулинг! Но, как и в случае с многими другими играми, он использует необычные правила. Перед началом игры в ряд выставляют N кеглей. За сбивание i -й кегли начисляется Pi очков. Макс сделает ровно два броска, причём он точно знает, что первым броском удастся сбить ровно X кеглей, стоящих подряд, а вторым — ровно Y кеглей, стоящих подряд (между бросками кегли не сдвигаются). Макс задумался, какое наибольшее количество очков он может получить, если будет сбивать кегли оптимальным образом. Помогите ему найти ответ на этот вопрос. Входные данные Первая строка содержит целое число N (2≤N≤2⋅10 5) — количество кеглей в ряду. Вторая строка содержит целые числа X и Y (1≤X,Y ; X+Y≤N ) — количество кеглей, которые Макс сбивает первым и вторым броском соответственно. Третья строка содержит N целых чисел Pi (1≤Pi≤10 9) — количество очков, начисляемых за сбивание каждой из кеглей. Выходные данные Выведите одно целое число — максимальное количество очков, которое сможет получить Макс после двух бросков.входные данные7 2 1 1 2 3 4 5 6 7 выходные данные18 входные данные8 4 2 19 3 7 8 4 6 9 7 выходные данные53

Для решения этой задачи мы можем использовать два указателя, один для первого броска (X кеглей) и второй для второго броска (Y кеглей). Мы будем двигать указатели вместе, чтобы найти наибольшую сумму очков.

Вот алгоритм решения:

  1. Считываем входные данные: N, X, Y и массив Pi.
  2. Инициализируем переменные max_score и current_score равными 0.
  3. Инициализируем переменные i и j равными 0.
  4. Пока i < N-X+1 и j < N-Y+1:
    • Вычисляем сумму очков для текущего состояния указателей: current_score = sum(Pi[i:i+X]) + sum(Pi[j:j+Y]).
    • Если current_score > max_score, обновляем max_score.
    • Увеличиваем i и j на 1.
  5. Выводим max_score.

Вот реализация на языке Python:

N = int(input()) X, Y = map(int, input().split()) Pi = list(map(int, input().split()))

max_score = 0 current_score = 0 i = 0 j = 0

while i < N-X+1 and j < N-Y+1: current_score = sum(Pi[i:i+X]) + sum(Pi[j:j+Y]) if current_score > max_score: max_score = current_score i += 1 j += 1

print(max_score)