Присоединиться

11 класс·средний уровень

Необходимо выбрать такую подпоследовательность подряд идущих чисел

Условие

На вход программы поступает последовательность из целых положительных чисел. Необходимо выбрать такую подпоследовательность подряд идущих чисел, чтобы их сумма была максимальной и делилась на 89, а также её длину. Если таких подпоследовательностей несколько, выбрать такую, у которой длина меньше.

Входные данные.

Файл AФайл BДаны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 68000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10000. Программа должна вывести длину найденной последовательности.

Пример входного файла:8234934234595Для делителя 50 при указанных входных данных значением искомой суммы должно быть число 100 (3 + 4 + 93 или 5 + 95). Следовательно, ответ на задачу — 2. В ответе укажите два числа: сначала значение искомой длины для файла A, затем для файла B. Ответ:

Ответ

Ответ и полный разбор откроются после входа

Посмотреть ответ

Решение по шагам

  1. Как рассуждать

    Решение. Перебираем все возможные суммы, которые начинаются на i-том элементе и заканчиваются на j-том элементе. Нашли бОльшую сумму — обновили ms (макс. сумму) и m (мин. длину). Нашли такую же сумму, как уже найденная максимальная, — обновили m при необходимости. Приведём переборное решение задачи на языке Python.f = open('27_B.txt')n = int(f.readline())nums = list(map(int, f.readlines()[:n]))m, ms = float('inf'), 0for i in range(len(nums)): for j in range(i, len(nums)): s = sum(nums[i:j + 1]) if s % 89 == 0 and s > ms: ms, m = s, j - i + 1 if s % 89 == 0 and s == ms: m = min(m, j - i + 1)print(m) Приведём динамическое решение задачи на языке Python.f = open('27_B.txt')k, s = 89, 0mins = {0: (0, 0)}res = []for i in range(1, int(f.readline())+1): s += int(f.readline()) if s % k in mins: res += [(s - mins[s % k][0], mins[s % k][1] - i)] else: mins[s % k] = (s, i)print(-max(res)[1]) Приведём решение задачи через метод частичных сумм на языке Python.f = open('27_B.txt') n = int(f.readline())k = 89r = {0: (0, 0)}ms = 0m = float('inf')for _ in range(n): x = int(f.readline()) t = {} for key in r: t[(key+x) % k] = (r[key][0] + x, r[key][1] +

Осталось ещё 3 шага

  1. if x % k not in t: t[x % k] = (x…

  2. r = t.copy() if 0 in r: if ms < r[0][0]: ms =…

  3. Примечание. Путь к файлу необходимо указать…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Программирование»

Необходимо выбрать такую подпоследовательность подряд идущих чисел — решение с объяснением | Lom Ai