Тема (старое) 27. Программирование

03 Цепочки, выбор последовательности, префиксные суммы

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела (старое) 27. программирование
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 61#82944Максимум баллов за задание: 2

Дана последовательность целых чисел. Рассматриваются все её непрерывные подпоследовательности, в которых количество чисел, делящихся на 18 кратно 7. Найдите наибольшую сумму наибольшей такой подпоследовательности.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 107)  . Каждая из следующих N строк содержит целое число, по модулю не превышающее 104  .

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open(’27B_09_1.txt’)
n = int(f.readline())
a = [int(i) for i in f]

# Чему кратны числа
k = 18
# Чему кратно количество чисел
d = 7

r = 0  # Количество встреченных чисел кратных k
# Для сумм с нулевым количеством нужных чисел изначально самая маленькая - начальная
tails = [0] + [10 ** 10] * (d - 1)
mx = 0
s = 0

for i in range(n):
    x = a[i]
    # Увеличиваем общую сумму
    s += x

    # Если нашли нужное число - увеличиваем на 1 их количество
    # перезаписываем хвост, выбирая наименьший для этого
    # количества кратных k чисел
    if x % k == 0:
        r += 1
    if s < tails[r % d]:
        tails[r % d] = s

    # Находим максимальную сумму, отсекая хвост с количеством кратных k чисел
    # равным остатку от деления на необходимое количество d
    if s - tails[r % d] > mx:
        mx = s - tails[r % d]

print(mx)

Ответ: 65587 8509602

Ошибка.
Попробуйте повторить позже

Задача 62#82945Максимум баллов за задание: 2

Дана последовательность целых чисел. Рассматриваются все её непрерывные подпоследовательности, в которых количество чисел, оканчивающихся на 31 кратно 12. Найдите наибольшую сумму наибольшей такой подпоследовательности.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 107)  . Каждая из следующих N строк содержит целое число, по модулю не превышающее 104  .

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open(’27B_09_2.txt’)
n = int(f.readline())
a = [int(i) for i in f]

# На что оканчиваются числа
k = 31
# Чему кратно количество чисел
d = 12


r = 0  # Количество встреченных чисел оканчивающихся k
# Для сумм с нулевым количеством нужных чисел изначально самая маленькая - начальная
tails = [0] + [10 ** 10] * (d - 1)
mx = 0
s = 0

for i in range(n):
    x = a[i]
    # Увеличиваем общую сумму
    s += x

    # Если нашли нужное число - увеличиваем на 1 их количество
    # перезаписываем хвост, выбирая наименьший для этого
    # количества оканчивающихся k чисел
    if (abs(x) % 100) == k:
        r += 1
    if s < tails[r % d]:
        tails[r % d] = s

    # Находим максимальную сумму, отсекая хвост с количеством оканчивающихся k чисел
    # равным остатку от деления на необходимое количество d
    if s - tails[r % d] > mx:
        mx = s - tails[r % d]

print(mx)

Ответ: 121892 14990022

Ошибка.
Попробуйте повторить позже

Задача 63#82946Максимум баллов за задание: 2

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

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N           7
(1 ≤ N ≤ 10)  . Каждая из следующих N строк содержит целое число, по модулю не превышающее 104  .

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open(’27B_09_3.txt’)
n = int(f.readline())
a = [int(i) for i in f]

# Общая сумма
s = 0
mx = 0
# Минимальный префикс
mn = 0

for i in range(n):
    x = a[i]
    # Увеличиваем общую сумму
    s += x
    # Если вычесть из суммы минимальный префикс - будет ли она больше максимума
    # если да - перезаписать максимум
    if s - mn > mx:
        mx = s - mn

    # При необходимости заменить префикс
    mn = min(mn, s)

print(mx)

Ответ: 133776 11715538

Ошибка.
Попробуйте повторить позже

Задача 64#82947Максимум баллов за задание: 2

На вход программы подаётся натуральное число N, а затем N целых чисел. Необходимо определить минимальную сумму непрерывной подпоследовательности элементов.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N           7
(1 ≤ N ≤ 10)  . Каждая из следующих N строк содержит целое число, по модулю не превышающее 104  .

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open(’27B_09_4.txt’)
n = int(f.readline())
a = [int(i) for i in f]

# Общая сумма
s = 0
# Максимальный префикс
mx = 0
mn = 0

for i in range(n):
    x = a[i]
    # Увеличиваем общую сумму
    s += x
    # Если вычесть из суммы максимальный префикс - будет ли она меньше минимума
    # если да - перезаписать минимум
    if s - mx < mn:
        mn = s - mx

    # При необходимости заменить префикс
    mx = max(mx, s)

print(mn)

Ответ: -138654 -6932214

Ошибка.
Попробуйте повторить позже

Задача 65#82950Максимум баллов за задание: 2

Дана последовательность натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, в которых количество простых чисел кратно 10. Найдите наибольшую сумму такой подпоследовательности.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N            7
(1 ≤ N ≤ 10)  . Каждая из следующих N строк содержит натуральное число, не превышающее 103  .

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
def simple(x):
    if x < 2:
        return False
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            return False
    return True


f = open(’27B_09_5.txt’)
n = int(f.readline())
a = [int(i) for i in f]

# Чему кратно количество чисел
d = 10

r = 0  # Количество встреченных простых чисел
# Для сумм с нулевым количеством нужных чисел изначально самая маленькая - начальная
tails = [0] + [10 ** 10] * (d - 1)
mx = 0
s = 0

for i in range(n):
    x = a[i]
    # Увеличиваем общую сумму
    s += x

    # Если нашли нужное число - увеличиваем на 1 их количество
    # перезаписываем хвост, выбирая наименьший для этого
    # количества оканчивающихся k чисел
    if simple(x):
        r += 1
        if s < tails[r % d]:
            tails[r % d] = s

    # Находим максимальную сумму, отсекая хвост с количеством оканчивающихся k чисел
    # равным остатку от деления на необходимое количество d
    if s - tails[r % d] > mx:
        mx = s - tails[r % d]

print(mx)


                                                                                                  
                                                                                                  

Ответ: 464173 500516847

Ошибка.
Попробуйте повторить позже

Задача 66#86272Максимум баллов за задание: 2

Дана последовательность из N целых чисел. Рассматриваются все её непрерывные подпоследовательности, такие, что сумма элементов каждой из них равна 0. Найдите среди них подпоследовательность с максимальной длиной. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой длинной из них.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 107)  . Каждая из следующих N строк содержит целое число, по модулю не превышающее   4
10  .

Пример входного файла:

7

32

10

-18

-22

-22

20

-43

В этом наборе можно выбрать числа 32, 10,-18,-22,-22,20 которые в сумме образуют число 0. Её длина будет равна 6.

В ответе укажите два числа через пробел: сначала значение искомой длины для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для А пункта:
f = open(’27A_04_2__3knes.txt’)
n = int(f.readline())
a = [int(i) for i in f]
l = 0
for i in range(len(a)):
    s = 0
    k = 0
    for j in range(i,len(a)):
        s += a[j]
        k += 1
        if s == 0:
            l = max(l,k)
print(l)
Решение для Б пункта:
’’’
Префиксная сумма равна 0, только в том случае, если конец и начало префиксной суммы равны между собой.
Идея решения: мы создадим словарь, у которого в качестве ключа будет значение префиксной суммы,
а в качестве значения у нас будет список, который будет хранить номера индексов,
на которых встречалась такая сумма.
Затем мы сможем найти максимальную длину вычитав минимальный индекс из максимального индекса,
на котором встречалась данная сумма.
’’’
f = open(’27B_04_2__3knet.txt’)
n = int(f.readline())
l = 0
d = dict()#создаем словарь, в котором будем хранить значения префиксной суммы и номера индексов
s = 0
for i in range(n):
    x = int(f.readline())
    s += x
    if s not in d.keys():#если данная префиксная сумма ранее не встречалась,
#то добавляем первый индекс к данной сумме
        d[s] = [i]
    else:#в ином случае добавляем новый индекс в список
        d[s].append(i)
res = [x for x in d.values() if len(x) > 1] #получаем списки индексов,
#чьи префиксные сумма встречались более одного раза за файл.
l = max(max(x) - min(x) for x in res) #определяем максимальную длину подпоследовательности.
print(l)

Ответ: 90 425361

Ошибка.
Попробуйте повторить позже

Задача 67#86273Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие, что сумма элементов каждой из них кратна k = 317. Найдите среди них подпоследовательность с максимальной чётной суммой. В ответ укажите значение суммы

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 107)  . Каждая из следующих N строк содержит натуральное число, не превышающее 104  .

Пример входного файла:

7

58

495

81

674

609

193

375

В этом наборе можно выбрать числа 58, 495 и 81, которые в сумме образуют число 634, четное число, кратное 317. Ответом для данного примера будет число 634.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для А пункта:
f = open(’2_27A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = 0
for i in range(len(a)):
    s = 0
    for j in range(i,len(a)):
        s += a[j]
        if s % 317 == 0 and s % 2 == 0:
            mx = max(mx,s)
print(mx)
Решение для Б пункта:
f = open(’2_27B.txt’)
n = int(f.readline())
D = 317
k = [[10**20 for i in range(2)] for j in range(D)]#двумерный массив,
#в котором мы будем хранить минимальные префиксные суммы
#любой чётности любого возможного остатка при делении на D
mx = 0
s = 0
for i in range(n):
    x = int(f.readline())
    s += x
    if s % D == 0 and s % 2 == 0:
        mx = max(mx,s)
    s1 = s - k[s%D][s%2]#новая сумма с отрубленным хвостиком, которая является чётной и кратной 317
    mx = max(mx,s1)
    k[s%D][s%2] = min(k[s%D][s%2],s)#обновляем список k, храним минимальные префиксные суммы
print(mx)

Ответ: 4708718 5002805874

Ошибка.
Попробуйте повторить позже

Задача 68#86274Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие, что сумма элементов каждой из них кратна k = 375. Найдите среди них подпоследовательность с максимальной нечётной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 107)  . Каждая из следующих N строк содержит натуральное число, не превышающее   4
10  .

Пример входного файла:

7

58

495

217

674

609

193

375

В этом наборе можно выбрать число 375. Ответом для данного примера будет число 1.

В ответе укажите два числа через пробел: сначала значение искомой длины для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для А пункта:
f = open(’2_27A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = 0
l = 0
for i in range(len(a)):
    s = 0
    k = 0
    for j in range(i, len(a)):
        s += a[j]
        k += 1
        if s % 375 == 0 and s % 2 != 0:
            if s > mx or (s == mx and k < l):
                mx = s
                l = k
print(l)
Решение для Б пункта:
f = open(’2_27B.txt’)
n = int(f.readline())
mx = 0
l = 0
D = 375
k = [[10 ** 20 for i in range(2)] for j in range(D)]
ml = [[0 for i in range(2)] for j in range(D)]
s = 0
for i in range(n):
    x = int(f.readline())
    s += x
    if s % D == 0 and s % 2 != 0:
        mx = s
        l = i + 1
    s1 = s - k[s % D][1 - s % 2]
    l1 = (i + 1) - ml[s % D][1 - s % 2]
    if s1 > mx or (s1 == mx and l1 < l):
        mx = s1
        l = l1
    if s < k[s%D][s%2]:
        k[s%D][s%2] = s
        ml[s%D][s%2] = i+1
print(l)

Ответ: 967 999952

Ошибка.
Попробуйте повторить позже

Задача 69#86275Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна максимальному простому числу из файла. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 108  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

пример входного файла:

7

44

11

42

11

34

63

95

В этом наборе можно выбрать последовательность 44+11 (сумма 55), которая имеет длину 2. Ответ: 2.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для А пункта:
def simple(x):#функция для проверки числа на простоту
    return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
f = open(’3_27A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
max_simple = max(x for x in a if simple(x))
mx = 0
l = 0
for i in range(len(a)):
    s = 0
    k = 0
    for j in range(i,len(a)):
        s += a[j]
        k += 1
        if s % max_simple == 0:
            if s > mx or (s == mx and k < l):
                mx = s
                l = k
print(l)
Решение для Б пункта:
def simple(x):
    return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
f = open(’3_27B.txt’)
a = [int(i) for i in f]
max_simple = max(x for x in a if simple(x))
k = [10**20 for i in range(max_simple)]
ml = [0 for i in range(max_simple)]
mx = 0
l = 0
s = 0
for i in range(n):
    x = a[i]
    s += x
    if s % max_simple == 0:
        mx = s
        l = i + 1
    s1 = s - k[s % max_simple]
    l1 = (i+1) - ml[s % max_simple]
    if s1 > mx or (s1 == mx and l1 < l):
        mx = s1
        l = l1
    if s < k[s % max_simple]:
                                                                                                  
                                                                                                  
        k[s % max_simple] = s
        ml[s % max_simple] = i + 1
print(l)

Ответ: 286 47939

Ошибка.
Попробуйте повторить позже

Задача 70#86276Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна максимальному числу из файла, которое находится в ряду Фибоначчи. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (          8
2 ≤ N ≤ 10  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

пример входного файла:

7

44

11

42

5

34

63

95

В этом наборе можно выбрать последовательность 44+11+42+5+34 (сумма 136), кратна 34 ( это число является максимальным из файла, которое при этом находится в ряду Фибоначчи). Длина этой подпоследовательности равна 5. Ответ: 5.

В ответе укажите два числа через пробел: сначала значение искомой длины для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open(’3_27B.txt’)
n = int(f.readline())
a = [int(i) for i in f]
fibb = [0,1]
while fibb[-1] < max(a):
    fibb.append(fibb[-1] + fibb[-2])
D = max(x for x in set(a) if x in fibb)
mx = 0
l = 0
k = [10**20 for i in range(D)]
ml = [0 for i in range(D)]
s = 0
for i in range(n):
    x = a[i]
    s += x
    if s % D == 0:
        mx = s
        l = i + 1
    s1 = s - k[s % D]
    l1 = (i+1) - ml[s % D]
    if s1 > mx or (s1 == mx and l1 < l):
        mx = s1
        l = l1
    if s < k[s % D]:
        k[s % D] = s
        ml[s % D] = i + 1
print(l)

Ответ: 343 47816

Ошибка.
Попробуйте повторить позже

Задача 71#86277Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 113. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой длинной из них.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 108  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

пример входного файла:

7

53

27

33

11

101

12

95

В этом наборе можно выбрать последовательности 53+27+33 (сумма 113) и 101+12 (сумма 113). Самая длинная из них, 34+27+33, имеет длину 3. Ответ: 3.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для А пункта:
f = open(’4_27A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = 0
l = 0
for i in range(len(a)):
    s = 0
    k = 0
    for j in range(i,len(a)):
        s += a[j]
        k += 1
        if s % 113 == 0:
            if s > mx or (s == mx and k > l):
                mx = s
                l = k
print(l)
Решение для Б пункта:
f = open(’4_27B.txt’)
n = int(f.readline())
D = 113
mx = 0
l = 0
k = [10**20 for i in range(D)]
ml = [0 for i in range(D)]
s = 0
for i in range(n):
    x = int(f.readline())
    s += x
    if s % D == 0:
        mx = s
        l = i + 1
    s1 = s - k[s % D]
    l1 = (i+1) - ml[s % D]
    if s1 > mx or (s1 == mx and l1 > l):
        mx = s1
        l = l1
    if s < k[s % D]:
        k[s % D] = s
        ml[s % D] = i+1
print(l)

Ответ: 492 98988

Ошибка.
Попробуйте повторить позже

Задача 72#86278Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 13 и при этом количество чисел кратных 5 кратно 7. Найдите среди них подпоследовательность с максимальной суммой. В ответ укажите значение суммы.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 108  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для пункта А:
f = open("4_27A.txt")
n = int(f.readline())
a = [int(i) for i in f]  # Считываем данные из файла и добавляем их в список
mx = 0  # Максимальная сумма чисел искомой последовательности
for i in range(len(a)):
    s = 0  # Сумма чисел для текущей последовательности
    k5 = 0  # Количество чисел, кратных 5
    for j in range(i, len(a)):
        s += a[j]  # Собираем искомую последовательность
        if a[j] % 5 == 0:  # Проверяем, кратно ли данное число 5, увеличиваем k5
            k5 += 1
        if s % 13 == 0 and k5 % 7 == 0:  # Проверяем, удовлетворяет ли текущая сумма всем условиям
            mx = max(mx, s)  # Записываем максимальную сумму
print(mx)  # Выводим ответ

Решение для пункта Б:
f = open("4_27B.txt")
n = int(f.readline())
k = 13
pref = [[10 ** 100] * k for i in range(7)]
# Мы создаём двумерный список для минимальных сумм с разными остатками от деления на k,
# учитывающий остатки от деления на 7 количества чисел, кратных 5
s = mx = k5 = 0  # Общая сумма / Максимальная сумма / Количество чисел, кратных 5
for i in range(n):
    x = int(f.readline())
    s += x  # Прибавляем новое число из файла
    if x % 5 == 0:  # Проверяем, кратно ли данное число 5, увеличиваем k5
        k5 += 1
    p = s % k  # Остаток от деления на k текущей суммы
    t = k5 % 7  # Остаток от деления на 7 количества чисел, кратных 5
    if p == 0 and k5 % 7 == 0:  # Проверяем, удовлетворяет ли общая сумма всем условиям
        mx = s  # Если да - записываем её как максимальную
    elif pref[t][p] != 10 ** 100:  # Если нет - проверяем, есть ли подходящий префикс
        mx = max(mx, s - pref[t][p])  # Записываем максимальную сумму, вычитая нужный префикс
    pref[t][p] = min(pref[t][p], s)  # После всех проверок записываем текущую общую сумму в качестве префикса
print(mx)  # Выводим ответ

Ответ: 249821 496340442

Ошибка.
Попробуйте повторить позже

Задача 73#86279Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 169 и при этом количество простых чисел кратно 10. Найдите среди них подпоследовательность с максимальной суммой. В ответ укажите значение суммы.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 108  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для пункта А:
def prime(b):  # Данная функция возвращает True или False в зависимости от того, простое число или нет
    for q in range(2, int(b ** 0.5) + 1):
        if b % q == 0:  # Проверяем, является ли q делителем числа b
            return False
    return b != 1  # Число 1 не является простым


f = open("5_27A.txt")
n = int(f.readline())
a = [int(i) for i in f]  # Считываем данные из файла и добавляем их в список
D = 169
M = 10
mx = 0  # Максимальная сумма чисел искомой последовательности
for i in range(len(a)):
    s = 0  # Сумма чисел для текущей последовательности
    kp = 0  # Количество простых чисел
    for j in range(i, len(a)):
        s += a[j]  # Собираем искомую последовательность
        if simple(a[j]):  # Проверяем, является ли число простым, увеличиваем kp
            kp += 1
        if s % D == 0 and kp % M == 0:  # Проверяем, удовлетворяет ли текущая сумма всем условиям
            mx = max(mx, s)  # Записываем максимальную сумму
print(mx)  # Выводим ответ

Решение для пункта Б:
def prime(b):  # Данная функция возвращает True или False в зависимости от того, простое число или нет
    for q in range(2, int(b ** 0.5) + 1):
        if b % q == 0:  # Проверяем, является ли q делителем числа b
            return False
    return b != 1  # Число 1 не является простым


f = open("5_27B.txt")
n = int(f.readline())
k = 169
pref = [[10 ** 100] * k for i in range(10)]
# Мы создаём двумерный список для минимальных сумм с разными остатками от деления на k,
# учитывающий остатки от деления на 10 количества простых чисел
s = mx = kp = 0  # Общая сумма / Максимальная сумма / Количество простых чисел
for i in range(n):
    x = int(f.readline())
    s += x  # Прибавляем новое число из файла
                                                                                                  
                                                                                                  
    if prime(x):  # Проверяем, является ли число простым, увеличиваем kp
        kp += 1
    p = s % k  # Остаток от деления на k текущей суммы
    t = kp % 10  # Остаток от деления на 10 количества простых чисел
    if p == 0 and kp % 10 == 0:  # Проверяем, удовлетворяет ли общая сумма всем условиям
        mx = s  # Если да - записываем её как максимальную
    elif pref[t][p] != 10 ** 100:  # Если нет - проверяем, есть ли подходящий префикс
        mx = max(mx, s - pref[t][p])  # Записываем максимальную сумму, вычитая нужный префикс
    pref[t][p] = min(pref[t][p], s)  # После всех проверок записываем текущую общую сумму в качестве префикса
print(mx)  # Выводим ответ

Ответ: 468130 5006122732

Ошибка.
Попробуйте повторить позже

Задача 74#86280Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 97 и при этом количество чисел кратных 13 равно 17. Найдите среди них подпоследовательность с максимальной суммой. В ответ укажите значение суммы.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 108  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для пункта А:
f = open("5_27A.txt")
n = int(f.readline())
a = [int(i) for i in f]  # Считываем данные из файла и добавляем их в список
mx = 0  # Максимальная сумма чисел искомой последовательности
for i in range(len(a)):
    s = 0  # Сумма чисел для текущей последовательности
    k13 = 0  # Количество чисел, кратных 13
    for j in range(i, len(a)):
        s += a[j]  # Собираем искомую последовательность
        if a[j] % 13 == 0:  # Проверяем, кратно ли данное число 13, увеличиваем k13
            k13 += 1
        if s % 97 == 0 and k13 == 17:  # Проверяем, удовлетворяет ли текущая сумма всем условиям
            mx = max(mx, s)
print(mx)

Решение для пункта Б:
f = open("5_27B.txt")
n = int(f.readline())
k = 97
pref = [[10 ** 100] * k for i in range(-17, 76828 + 1)]
# Мы создаём двумерный список для минимальных сумм с разными остатками от деления на k,
# учитывающий количество чисел, кратных 13 (Его нужно посчитать предварительно, в нашем файле - 76828)
# Перебор начинается от -17 во избежание ошибки,
# поскольку на первых итерациях значение выражения (k13 - 17) будет отрицательным
s = mx = k13 = 0  # Общая сумма / Максимальная сумма / Количество чисел, кратных 13
for i in range(n):
    x = int(f.readline())
    s += x  # Прибавляем новое число из файла
    if x % 13 == 0:  # Проверяем, кратно ли данное число 13, увеличиваем k13
        k13 += 1
    p = s % k  # Остаток от деления на k текущей суммы
    t = k13 - 17  # Остаток от деления на 7 количества чисел, кратных 13
    if p == 0 and k13 == 17:  # Проверяем, удовлетворяет ли общая сумма всем условиям
        mx = s  # Если да - записываем её как максимальную
    elif pref[t][p] != 10 ** 100:  # Если нет - проверяем, есть ли подходящий префикс
        mx = max(mx, s - pref[t][p])  # Записываем максимальную сумму, вычитая нужный префикс
    pref[k13][p] = min(pref[k13][p], s)  # После всех проверок записываем текущую общую сумму в качестве префикса
print(mx)  # Выводим ответ

Ответ: 125033 2500854

Ошибка.
Попробуйте повторить позже

Задача 75#86281Максимум баллов за задание: 2

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 101. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой короткой из них.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 108  ). Каждая из следующих N строк содержит натуральное число, не превышающее 10 000.

пример входного файла:

7

34

27

33

11

101

12

95

В этом наборе можно выбрать последовательность 101 (сумма 101) имеет длину 1. Ответ: 1.

В ответе укажите два числа через пробел: сначала значение искомой длины для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
Решение для А пункта:
f = open(’5_27A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = 0
l = 0
for i in range(len(a)):
    s = 0
    k = 0
    for j in range(i,len(a)):
        s += a[j]
        k += 1
        if s % 101 == 0:
            if s > mx or (s == mx and k < l):
                mx = s
                l = k
print(l)
Решение для Б пункта:
f = open(’5_27B.txt’)
n = int(f.readline())
D = 101
mx = 0
l = 0
s = 0
k = [10**20 for i in range(D)]
ml = [0 for i in range(D)]
for i in range(n):
    x = int(f.readline())
    s += x
    if s % D == 0:
        mx = s
        l = i + 1
    s1 = s - k[s % D]
    l1 = (i+1) - ml[s % D]
    if s1 > mx or (s1 == mx and l1 < l):
        l = l1
        mx = s1
    if s < k[s % D]:
        k[s % D] = s
        ml[s % D] = i + 1
print(l)

Ответ: 985 999990
Рулетка
Вы можете получить скидку в рулетке!