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

08 Макс/мин, кол-во пар, сумма/разность/произведение кратно/не кратно на расстоянии

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

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

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

Имеется набор данных из N  целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар элементов, которые находятся на расстоянии не менее    8  (за расстояние между элементами принять разность их индексов), их сумма делится на 71  и при этом хотя бы один элемент из пары больше 21  .

В первой строке файла находится число N  , в следующих N  строках даны элементы последовательности, целые положительные числа.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open("22_A.txt")
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))
cnt = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] > 21 or a[j] > 21) and (a[i] + a[j]) % 71 == 0 and j - i >= 8:
            cnt += 1
print(cnt)

Эффективное решение:

f = open(’22_A.txt’)

s = 8  # Расстояние между элементами
k = 71  # Чему должна быть кратна сумма

n = int(f.readline())
a = [int(i) for i in f]

# Список с количествами чисел, удовлетворяющих определенным условием
# Индексы числа nums[x][y] обозначают следующее:
# x - больше ли число чем 21 (1 - да, 0 - нет)
# y - остаток от деления числа на k
nums = [[0] * k for _ in range(2)]
cnt = 0

for i in range(s, n):
    # Находим остаток первого числа пары
    ost1 = a[i - s] % k
    # Увеличиваем количество чисел с такими характеристиками
    nums[int(a[i - s] > 21)][ost1] += 1

    # Вычисляем остаток от деления на k числа-пары для x
    ost2 = (k - (a[i] % k)) % k

    # Увеличиваем ответ на количество пар с x, сумма которых будет кратна k,
    # где первое число точно больше 21
    cnt += nums[1][ost2]
    # Если a[i] больше 21, то его можно поставить также в пару с числами меньше 21
    if a[i] > 21:
        cnt += nums[0][ost2]

print(cnt)

Ответ: 2 70422885

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

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

На вход подается число N  , а затем последовательность из N  натуральных чисел. Напишите программу, которая находит количество пар элементов, произведение которых кратно 2  , сумма кратна 15  и хотя бы один элемент из пары больше 20  , при условии, что элементы стоят на расстоянии не меньше 7  , то есть |i− j| ≥ 7  , где i ⁄= j  — номера элементов последовательности.

В первой строке файла находится число N  , в следующих N  строках даны элементы последовательности, целые положительные числа.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open("23_A.txt")
n = int(f.readline())
a = [int(i) for i in f]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % 2 == 0 and (a[i] + a[j]) % 15 == 0:
            if (a[i] > 20 or a[j] > 20) and j - i >= 7:
                ans += 1
print(ans)

Эффективное решение:

f = open(’23_B.txt’)

s = 7  # Расстояние между элементами
k = 15  # Чему должна быть кратна сумма
p = 2  # Чему должно быть кратно произведение

n = int(f.readline())
a = [int(i) for i in f]

# Список с максимальными числами, удовлетворяющими определенным условием
# Индексы числа nums[x][y][z] обозначают следующее:
# x - больше ли число чем 20 (1 - да, 0 - нет)
# y - кратно ли число 2 (1 - да, 0 - нет)
# z - остаток от деления числа на k
nums = [[[0] * k for _ in range(2)] for _ in range(2)]
ans = 0

for i in range(s, n):
    # Находим остаток первого числа пары
    ost1 = a[i - s] % k
    # Увеличиваем количество таких чисел
    nums[int(a[i - s] > 20)][int(a[i - s] % 2 == 0)][ost1] += 1

    # Вычисляем остаток от деления на k числа-пары для x
    ost2 = (k - (a[i] % k)) % k

    ans += nums[1][1][ost2]
    if a[i] % 2 == 0:
        ans += nums[1][0][ost2]
        if a[i] > 30:
            ans += nums[0][0][ost2]
    if a[i] > 30:
        ans += nums[0][1][ost2]

print(ans)

Ответ: 7 250044672

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

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

На вход подается число N  , а затем последовательность из N  натуральных чисел. Напишите программу, которая находит количество пар элементов, произведение которых кратно 4  и хотя бы один элемент из пары меньше 20  , при условии, что элементы стоят на расстоянии не меньше 3  , то есть |i− j| ≥ 3  , где i ⁄= j  — номера элементов последовательности.

В первой строке файла находится число N  , в следующих N  строках даны элементы последовательности, целые положительные числа.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open("24_A.txt")
n = int(f.readline())
a = [int(i) for i in f]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % 4 == 0 and (a[i] < 20 or a[j] < 20) and j - i >= 3:
            ans += 1
print(ans)

Эффективное решение:

f = open(’24_B.txt’)

s = 3  # Расстояние между элементами
p = 4  # Чему должно быть кратно произведение
d = [4, 2, 1]

n = int(f.readline())
a = [int(i) for i in f]

# Список с количествами чисел, удовлетворяющих определенным условием
# Индексы числа nums[x][y] обозначают следующее:
# x - меньше ли число чем 20 (1 - да, 0 - нет)
# y - максимальный делитель p, которому кратно число
nums = [[0 for _ in range(p + 1)] for _ in range(2)]
ans = 0

for i in range(s, n):
    # Получаем индекс для первого критерия
    ind = int(a[i - s] < 20)
    # Ищем максимальный делитель, которому кратно число
    for j in d:
        if a[i - s] % j == 0:
            # Обновляем максимальное число с такими характеристиками
            nums[ind][j] += 1
            break

    # Перебираем все возможные делители и ищем те, при которых произведение будет кратно 4
    for j in d:
        if a[i] % j == 0:
            # Обновляем ответ, если новая сумма больше прошлой
            ans += nums[1][p // j]

            # Если a[i] меньше 20, то его можно поставить в пару с числами больше 20
            if a[i] < 20:
                ans += nums[0][p // j]

print(ans)

Ответ: 14 175268

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

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

На вход подается число N  , а затем последовательность из N  натуральных чисел. Напишите программу, которая находит количество пар элементов, произведение которых кратно 12  , сумма кратна 5  и ровно один элемент пары больше   13  при условии, что элементы стоят на расстоянии не меньше 4  , то есть |i− j| ≥ 4  , где i ⁄= j  - номера элементов последовательности.

В первой строке файла находится число N  , в следующих N  строках даны элементы последовательности, целые положительные числа.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open("25_A.txt")
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))
cnt = 0
for i in range(n):
    for j in range(i + 1, n):
        if ((a[i] > 13) != (a[j] > 13)) and (a[i] + a[j]) % 5 == 0 and (a[i] * a[j]) % 12 == 0 and j - i >= 4:
            cnt += 1
print(cnt)

Эффективное решение:

f = open(’25_B.txt’)

s = 4  # Расстояние между элементами
k = 5  # Чему должна быть кратна сумма
p = 12  # Чему должно быть кратно произведение
d = [12, 6, 4, 3, 2, 1]

n = int(f.readline())
a = [int(i) for i in f]

# Список с количествами чисел, удовлетворяющих определенным условием
# Индексы числа nums[x][y][z] обозначают следующее:
# x - больше ли число чем 13 (1 - да, 0 - нет)
# y - максимальный делитель p, которому кратно число
# z - остаток от деления числа на k
nums = [[[0] * k for _ in range(p + 1)] for _ in range(2)]
cnt = 0

for i in range(s, n):
    # Находим остаток первого числа пары
    ost1 = a[i - s] % k

    # Ищем максимальный делитель, которому кратно число
    for j in d:
        if a[i - s] % j == 0:
            # Увеличиваем количество чисел с такими характеристиками
            nums[int(a[i - s] > 13)][j][ost1] += 1
            break

    # Вычисляем остаток от деления на k числа-пары для x
    ost2 = (k - (a[i] % k)) % k

    # Перебираем все возможные делители и ищем те, при которых произведение будет кратно 15
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество пар с x, сумма которых будет кратна k,

            # Если a[i] больше 13, то его можно поставить в пару с числами меньше 13
                                                                                                     
                                                                                                     
            if a[i] > 13:
                cnt += nums[0][p // j][ost2]
            # Иначе только с числами больше 13
            else:
                cnt += nums[1][p // j][ost2]

print(cnt)

Ответ: 2 16246

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

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

На вход подается число 5 < n ≤ 20  , а затем последовательность из n  натуральных чисел. Напишите программу, которая находит количество пар элементов, произведение которых не кратно сумме элементов пары, сумма элементов пары кратна 2  и хотя бы один элемент из пары больше 100  при условии, что элементы стоят на расстоянии не меньше 5  , то есть |i− j| ≥ 5  , где i ⁄= j  - номера элементов последовательности.

В первой строке файла 27.txt  находится число (6 ≤ N ≤ 20)  , в следующих N  строках даны элементы последовательности, целые положительные числа, не превышающее 1000  .

В ответе укажите одно число, значение искомого количества для файла.

Вложения к задаче
Показать ответ и решение
f = open("27.txt")
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))
count = 0
for i in range(n - 5):
    for j in range(i + 5, n):
        k1 = a[i] * a[j]
        k2 = a[i] + a[j]
        if k1 % k2 != 0 and k2 % 2 == 0 and (a[i] > 100 or a[j] > 100):
            count += 1
print(count)

Ответ: 59

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

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

В файле содержится последовательность целых чисел. Элементы последовательности — неповторяющиеся натуральные числа, принимающие значения до 100000  включительно.

Рассматриваются тройки вида a = b+ c  , где b,c  являются полными квадратами (элементы в тройке могут располагаться как угодно). Элементами тройки являются различные числа, которые находятся хотя бы на расстоянии 10 друг от друга.

Найдите количество троек, подходящих под условие задачи и максимальное значение a  среди данных троек, в ответе числа запишите через пробел.

Вложения к задаче
Показать ответ и решение

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

Напишем программу, которая перебирает все возможные тройки чисел из файла, расположенных так, что расстояние между индексами каждого следующего элемента не менее 10. Для каждой тройки сортируем числа, чтобы удобнее проверить условие: первые два элемента должны быть полными квадратами, а сумма этих двух чисел должна равняться третьему элементу. Проверяем, что корень квадратный первых двух чисел — целое число, что значит они — полные квадраты. Если тройка удовлетворяет условию, увеличиваем счётчик подходящих троек и обновляем максимальное значение элемента a (суммы). По окончании перебора выводим количество таких троек и максимальное значение a.

# Открываем файл и считываем последовательность чисел в список
f = open("17.txt")
a = [int(i) for i in f]

cnt = 0                    # Счётчик подходящих троек
mx = -10 ** 10             # Переменная для хранения максимального значения a

# Перебираем тройки с учётом расстояния между индексами не менее 10
for i in range(len(a)):
    for j in range(i + 10, len(a)):
        for k in range(j + 10, len(a)):
            nums = sorted([a[i], a[j], a[k]])  # Сортируем для удобства проверки условия a = b + c

            # Проверяем, что первые два числа — полные квадраты
            if (nums[0] ** 0.5 == int(nums[0] ** 0.5)) \
   and (nums[1] ** 0.5 == int(nums[1] ** 0.5)):
                # Проверяем равенство суммы двух первых чисел третьему
                if nums[0] + nums[1] == nums[2]:
                    cnt += 1                          # Увеличиваем счётчик
                    mx = max(mx, nums[2])             # Обновляем максимум среди a

# Выводим количество подходящих троек и максимальное значение a
print(cnt, mx)

Ответ: 2 8545

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

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

Задание выполняется с использованием прилагаемых файлов.

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

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

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

Пример входных данных:

6 2

10

1

15

30

1515

3

Для указанных входных данных ответом будет 1530  .

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’26_A.txt’)

n, s = map(int, f.readline().split())
a = [int(i) for i in f]
mx = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        if j - i >= s:
            mx = max(mx, a[i] + a[j])

print(mx)

Эффективное решение:

f = open(’26_B.txt’)

n, s = map(int, f.readline().split())
a = [int(i) for i in f]
ans = -10 ** 10

s = 5  # Расстояние между элементами

# Максимальное найденное на данный момент число
mx_prev = -10 ** 10

for i in range(s, n):
    # Обновляем предыдущий максимум
    mx_prev = max(mx_prev, a[i - s])
    # Обновляем ответ
    ans = max(ans, a[i] + mx_prev)

print(ans)

Ответ: 179 174980

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

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

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное четное произведение двух показаний, между моментами которых прошло не менее 7 минут. Если получить такое произведение не удается, ответ считается равным — 1.

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

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

10

5

4

8

3

9

2

12

7

11

9

Для указанных входных данных значением искомого произведения должно быть число 72.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’27_A.txt’)

n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 2 == 0 and j - i >= 7:
            ans = max(ans, a[i] * a[j])

print(ans)

Эффективное решение:

f = open(’27_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10

k = 2  # Чему должна быть кратно произведение
s = 7  # Расстояние между элементами

# Список максимальных чисел с определенными остатками от деления на k
# Например, под индексом 1 хранится максимальное число с остатком 1
nums = [-10 ** 10] * k

for i in range(s, n):
    # Считаем остаток от деления первого числа пары на k
    ost1 = a[i - s] % k
    # Обновляем максимальное число с таким остатком
    nums[ost1] = max(nums[ost1], a[i - s])

    # С четным числом любое число образует четное произведение
    ans = max(ans, a[i] * nums[0])
    # Если же текущее число четное, его можно поставить в пару и с нечетными
    if a[i] % 2 == 0:
        ans = max(ans, a[i] * nums[1])

print(ans)

Ответ: 720528 1000000

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

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

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное нечетное произведение двух показаний, между моментами которых прошло не менее 9 минут. Если получить такое произведение не удается, ответ считается равным —1.

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

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

12

7

13

5

4

8

3

9

2

12

7

11

9

Для указанных входных данных значением искомого произведения должно быть число 143.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’28_A.txt’)

n = int(f.readline())
a = [int(i) for i in f]
mx = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        if a[i] * a[j] % 2 != 0 and j - i >= 9:
            mx = max(mx, a[i] * a[j])

print(mx)

Эффективное решение:

f = open(’28_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10

s = 9  # Расстояние между элементами

# Максимальное найденное на данный момент число
mx_prev = -10 ** 10

for i in range(s, n):
    # Только произведение двух нечетных чисел будет нечетным
    # поэтому работаем только с нечетными числами

    if a[i - s] % 2 != 0:
        # Обновляем максимальное встреченное число
        mx_prev = max(mx_prev, a[i - s])
    if a[i] % 2 != 0:
        # Обновляем ответ
        ans = max(ans, a[i] * mx_prev)

print(ans)

Ответ: 723513 998001

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

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

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, кратное 6, между моментами которых прошло не менее 4 минут. Если получить такое произведение не удается, ответ считается равным —1.

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

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

7

5

4

8

3

9

2

12

Для указанных входных данных значением искомого произведения должно быть число 96.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’29_A.txt’)

n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 6 == 0 and j - i >= 4:
            ans = max(ans, a[i] * a[j])

print(ans)

Эффективное решение:

Для Б

f = open(’29_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]

ans = 0

s = 4  # Расстояние между элементами
p = 6  # Чему должно быть кратно произведение
d = [6, 3, 2, 1]  # Делители числа p

# Список максимальных чисел, делящихся на определенный делитель числа p
# Например, под индексом 2 хранится максимальное число, делящееся на 2
nums = [0] * (p + 1)

for i in range(s, n):
    # Ищем максимальный делитель, на который делится первое число пары
    for j in d:
        if a[i - s] % j == 0:
            # Обновляем соответствующий максимум
            nums[j] = max(nums[j], a[i - s])
            break

    # Ищем делители, на которые делится второе число пары
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество образованных пар
            ans = max(ans, a[i] * nums[p // j])

print(ans)

Ответ: 973026 999000

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

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

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, кратное 8, между моментами которых прошло не менее 6 минут. Если получить такое произведение не удается, ответ считается равным —1.

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

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

12

6

12

5

4

8

3

9

2

12

7

11

9

Для указанных входных данных значением искомого произведения должно быть число 144.

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

Вложения к задаче
Показать ответ и решение

Для А

f = open(’30_A.txt’)

n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 8 == 0 and j - i >= 6:
            ans = max(ans, a[i] * a[j])

print(ans)

Для Б

f = open(’30_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]

ans = 0

s = 6  # Расстояние между элементами
p = 8  # Чему должно быть кратно произведение
d = [8, 4, 2, 1]  # Делители числа p

# Список максимальных чисел, делящихся на определенный делитель числа p
# Например, под индексом 2 хранится максимальное число, делящееся на 2
nums = [0] * (p + 1)

for i in range(s, n):
    # Ищем максимальный делитель, на который делится первое число пары
    for j in d:
        if a[i - s] % j == 0:
            # Обновляем соответствующий максимум
            nums[j] = max(nums[j], a[i - s])
            break

    # Ищем делители, на которые делится второе число пары
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество образованных пар
            ans = max(ans, a[i] * nums[p // j])

print(ans)

Ответ: 821712 994008

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

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

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, между моментами которых прошло не более 6 минут. Если получить такое произведение не удается, ответ считается равным -1.

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

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

10

7

13

5

4

8

3

9

2

12

7

Для указанных входных данных значением искомого произведения должно быть число 117.

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

Вложения к задаче
Показать ответ и решение
# Для файла B заменить следующую строчку:
# f = open(’10_B.txt’)
f = open(’10_A.txt’)
n = int(f.readline())

maxi = 0
x = []
for i in range (n):
    x.append(int(f.readline()))

# Так как необходимо, чтобы расстояние было не больше 6,
# второй цикл будет проходить 6 элементов начиная со следующего
for i in range(0,len(x)-6):
    for j in range(i+1, i+7):
        if x[i]*x[j] > maxi:
            maxi = x[i]*x[j]
print(maxi)

Ответ: 976119 997002

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

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

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, кратное 15, между моментами которых прошло не более 8 минут. Если получить такое произведение не удается, ответ считается равным -1.

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

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

12

5

10

7

13

5

4

8

3

9

2

12

7

Для указанных входных данных значением искомого произведения должно быть число 90.

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

Вложения к задаче
Показать ответ и решение
# Для файла B заменить следующую строчку:
# f = open(’10_B.txt’)
f = open(’11_B.txt’)
n = int(f.readline())

maxi = 0
x = []
for i in range(n):
    x.append(int(f.readline()))

# Так как необходимо, чтобы расстояние было не больше 8,
# второй цикл будет проходить 8 элементов начиная со следующего
for i in range(0, len(x)-8):
    for j in range(i+1, i+9):
        if x[i]*x[j] > maxi and (x[i]*x[j])%15==0:
            maxi = x[i]*x[j]

print(maxi)

Ответ: 550200 991020

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

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

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i+ 4 ≤ j ≤ N и произведение элементов кратно 14.

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

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

7

7

5

6

12

5

14

2

Для указанных входных данных количество подходящих пар должно быть равно 3.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’32_A.txt’)

n = int(f.readline())
a = [int(i) for i in f]
cnt = 0

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 14 == 0 and j - i >= 4:
            cnt += 1

Эффективное решение:

f = open(’32_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]

ans = 0

s = 4  # Расстояние между элементами
p = 14  # Чему должно быть кратно произведение
d = [14, 7, 2, 1]  # Делители числа p

# Список количеств чисел, делящихся на определенный делитель числа p
# Например, под индексом 2 хранится кол-во чисел, делящихся на 2
nums = [0] * (p + 1)

for i in range(s, n):
    # Ищем максимальный делитель, на который делится первое число пары
    for j in d:
        if a[i - s] % j == 0:
            # Увеличиваем кол-во чисел делящихся на j
            nums[j] += 1
            break

    # Ищем делители, на которые делится второе число пары
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество образованных пар
            ans += nums[p // j]

print(ans)

Ответ: 34 356026146

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

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

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i+ 8 ≤ j ≤ N и произведение элементов кратно 9.

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

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

13

7

5

6

12

5

14

2

6

12

8

9

3

5

Для указанных входных данных количество подходящих пар должно быть равно 5.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’33_A.txt’)

n = int(f.readline())
a = [int(i) for i in f]
cnt = 0

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 9 == 0 and j - i >= 8:
            cnt += 1

print(cnt)

Эффективное решение:

Для Б

f = open(’33_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]

ans = 0

s = 8  # Расстояние между элементами
p = 9  # Чему должно быть кратно произведение
d = [9, 3, 1]  # Делители числа p

# Список количеств чисел, делящихся на определенный делитель числа p
# Например, под индексом 2 хранится кол-во чисел, делящихся на 2
nums = [0] * (p + 1)

for i in range(s, n):
    # Ищем максимальный делитель, на который делится первое число пары
    for j in d:
        if a[i - s] % j == 0:
            # Увеличиваем кол-во чисел делящихся на j
            nums[j] += 1
            break

    # Ищем делители, на которые делится второе число пары
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество образованных пар
            ans += nums[p // j]

print(ans)

Ответ: 42 13237206

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

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

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i+ 13 ≤ j ≤ N и произведение элементов кратно 12.

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

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

15

10

8

7

5

6

12

5

14

2

6

12

8

9

3

5

Для указанных входных данных количество подходящих пар должно быть равно 1.

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

Вложения к задаче
Показать ответ и решение

Для А

f = open(’14_A.txt’)
n = int(f.readline())

cnt = 0
x = []
for i in range (n):
    x.append(int(f.readline()))

for i in range(0, len(x)-13):
    for j in range(i+13, len(x)):
        if (x[i]*x[j])%12==0:
            cnt += 1
print(cnt)

Для Б

f = open(’34_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]

ans = 0

s = 13  # Расстояние между элементами
p = 12  # Чему должно быть кратно произведение
d = [12, 6, 4, 3, 2, 1]  # Делители числа p

# Список количеств чисел, делящихся на определенный делитель числа p
# Например, под индексом 2 хранится кол-во чисел, делящихся на 2
nums = [0] * (p + 1)

for i in range(s, n):
    # Ищем максимальный делитель, на который делится первое число пары
    for j in d:
        if a[i - s] % j == 0:
            # Увеличиваем кол-во чисел делящихся на j
            nums[j] += 1
            break

    # Ищем делители, на которые делится второе число пары
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество образованных пар
            ans += nums[p // j]

print(ans)

Ответ: 4 502242147

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

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

Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов (ai  , aj  ) этого набора, в которых 1 ≤ i+6 < j ≤ N и произведение элементов кратно 18.

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

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

13

7

5

6

12

5

14

2

6

12

8

9

3

5

Для указанных входных данных количество подходящих пар должно быть равно 4.

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

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’9_A.txt’)
n = int(f.readline())

counter = 0
a = []
for i in range(n):
    a += [int(f.readline())]

for i in range(0,len(a) - 1):
    for j in range(i+7,len(a)):
        if (a[i]*a[j]) % 18 == 0:
            counter += 1
print(counter)

Эффективное решение:

f = open(’35_B.txt’)

n = int(f.readline())
a = [int(i) for i in f]

ans = 0

s = 6  # Расстояние между элементами
p = 18  # Чему должно быть кратно произведение
d = [18, 9, 6, 3, 2, 1]  # Делители числа p

# Список количеств чисел, делящихся на определенный делитель числа p
# Например, под индексом 2 хранится кол-во чисел, делящихся на 2
nums = [0] * (p + 1)

for i in range(s, n):
    # Ищем максимальный делитель, на который делится первое число пары
    for j in d:
        if a[i - s] % j == 0:
            # Увеличиваем кол-во чисел делящихся на j
            nums[j] += 1
            break

    # Ищем делители, на которые делится второе число пары
    for j in d:
        if a[i] % j == 0:
            # Увеличиваем ответ на количество образованных пар
            ans += nums[p // j]

print(ans)

Ответ: 6 9765275

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

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

По каналу связи передается последовательность целых неотрицательных чисел – показания прибора, полученные с интервалом в 1 мин в течение T  минут (T  – целое число). Прибор измеряет количество атмосферных осадков, полученное регистратором за минуту, предшествующую моменту регистрации, и передает это значение в условных единицах измерения.

Определите два таких переданных числа, чтобы между моментами их передачи прошло не менее K  мин, а их сумма была максимально возможной. Укажите найденное суммарное количество осадков.

Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит натуральное число    K  – минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй – количество переданных показаний N  (1 ≤ N ≤ 10.000.000,N > K )  . В каждой из следующих N  строк находится одно целое неотрицательное число, не превышающее 100.000, обозначающее количество осадков за соответствующую минуту.

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’A.txt’)

s = int(f.readline())  # Расстояние между элементами
n = int(f.readline())
a = [int(i) for i in f]
mx = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        if j - i >= s:
            mx = max(mx, a[i] + a[j])

print(mx)

Эффективное решение:

f = open(’B.txt’)

s = int(f.readline())  # Расстояние между элементами
n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10


# Максимальное найденное на данный момент число
mx_prev = -10 ** 10

for i in range(s, n):
    # Обновляем максимальное число
    mx_prev = max(mx_prev, a[i - s])
    # Обновляем ответ
    ans = max(ans, a[i] + mx_prev)

print(ans)

Ответ: 19231 19997

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

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

По каналу связи передается последовательность целых неотрицательных чисел – показания прибора, полученные с интервалом в 1 мин в течение T  минут (T  – целое число). Прибор измеряет количество атмосферных осадков, полученное регистратором за минуту, предшествующую моменту регистрации, и передает это значение в условных единицах измерения.

Определите два таких переданных числа, чтобы между моментами их передачи прошло не менее K  мин, а их сумма была максимально возможной и при этом не кратной 9. Укажите найденное суммарное количество осадков.

Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит натуральное число    K  – минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй – количество переданных показаний N  (1 ≤ N ≤ 10.000.000,N > K )  . В каждой из следующих N  строк находится одно целое неотрицательное число, не превышающее 100.000, обозначающее количество осадков за соответствующую минуту.

Вложения к задаче
Показать ответ и решение

Эффективное решение:

f = open(’B.txt’)

s = int(f.readline())  # Расстояние между элементами
n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10

k = 9  # Чему не должна быть кратна сумма

# Список максимальных чисел с определенными остатками от деления на k
# Например, под индексом 2 хранится максимальное число с остатком 2
nums = [-10 ** 10] * k

for i in range(s, n):
    # Считаем остаток от деления первого числа пары на k
    ost1 = a[i - s] % k
    # Обновляем максимум по остатку
    nums[ost1] = max(nums[ost1], a[i - s])

    # Считаем остаток, который должен быть у числа,
    # которое нельзя поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    for j in range(k):
        # Если сумма не будет кратна k
        if j != ost2:
            # Обновляем ответ, если он больше предыдущего
            ans = max(ans, a[i] + nums[j])

print(ans)

Ответ: 1852 1997

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

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

По каналу связи передается последовательность целых чисел – показания прибора. В течение N  минут (N  – натуральное число) прибор ежеминутно регистрирует значение напряжения (в условных единицах) в электрическойй сети и передает его на сервер.

Определите три таких переданных числа, чтобы между моментами передачи любых двух из них прошло не менее K  мин, а сумма этих трех чисел была максимально возможной. Запишите в ответе найденную сумму.

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

Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит натуральное число    K  – минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй – количество переданных показаний N  (1 ≤ N ≤ 10.000.000,N > K )  . В каждой из следующих N  строк находится одно целое число, по модулю не превышающее 10.000.000, которое обозначает значение напряжения в соответствующую минуту.

Запишите в ответе два числа: сначала значение искомой величины для файла А, затем – для файла В.

Вложения к задаче
Показать ответ и решение

Переборное решение:

f = open(’A.txt’)

s = int(f.readline())  # Расстояние между элементами
n = int(f.readline())
a = [int(i) for i in f]
mx = -10 ** 10

for i in range(n):
    for j in range(i + 1, n):
        for k in range(j + 1, n):
            if j - i >= s and k - j >= s:
                mx = max(mx, a[i] + a[j] + a[k])

print(mx)

Эффективное решение:

f = open(’B.txt’)

s = int(f.readline())  # Расстояние между элементами
n = int(f.readline())
a = [int(i) for i in f]
ans = -10 ** 10


# Максимальное найденное на данный момент число
mx_one = mx_two = -10 ** 10

for i in range(2 * s, n):
    # Обновляем первое максимальное число
    mx_one = max(mx_one, a[i - 2 * s])
    # Обновляем второе максимальное число
    mx_two = max(mx_two, a[i - s])
    # Обновляем ответ
    ans = max(ans, a[i] + mx_one + mx_two)

print(ans)

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