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

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

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

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

Задача 41#74412Максимум баллов за задание: 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())  # минимальное расстояние между элементами (K)
n = int(f.readline())  # количество чисел (N)
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):
            # проверка выполнения условия: расстояния не меньше K
            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)

Ответ: 1942 2997

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

Задача 42#74413Максимум баллов за задание: 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]
mn = 10 ** 10

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

print(mn)

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

f = open(’B.txt’)

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


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

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

print(ans)

Ответ: 1011 5

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

Задача 43#74414Максимум баллов за задание: 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]
mn = 10 ** 10

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

print(mn)

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

f = open(’B.txt’)

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


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

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

print(ans)

Ответ: 218 8884

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

Задача 44#74415Максимум баллов за задание: 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]
mn = 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:
                mn = min(mn, a[i] + a[j] + a[k])

print(mn)

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

f = open(’B.txt’)

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


# минимальное найденное на данный момент число
mn_one = mn_two = 10 ** 10

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

print(ans)

Ответ: 1539 3

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

Задача 45#74416Максимум баллов за задание: 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]
mn = 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:
                mn = min(mn, a[i] + a[j] + a[k])

print(mn)

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

f = open(’B.txt’)

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


# минимальное найденное на данный момент число
mn_one = mn_two = 10 ** 10

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

print(ans)

Ответ: 1996 6

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар элементов этого набора, в которых 1 ≤ i+ 6 < j ≤ N  , а сумма делится на 210.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(cnt)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Увеличиваем ответ на количество образованных пар
    cnt += nums[ost2]

print(cnt)

Ответ: 0 238305

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар элементов этого набора, в которых 1 ≤ i+ 3 < j ≤ N  , а сумма делится на 111.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(cnt)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Увеличиваем ответ на количество образованных пар
    cnt += nums[ost2]

print(cnt)

Ответ: 1 16212620

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар элементов этого набора, в которых 1 ≤ i+ 9 < j ≤ N  , а сумма делится на 114.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(cnt)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Увеличиваем ответ на количество образованных пар
    cnt += nums[ost2]

print(cnt)

Ответ: 2 437580

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар элементов этого набора, в которых 1 ≤ i+ 4 < j ≤ N  , а сумма делится на 154.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(cnt)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Увеличиваем ответ на количество образованных пар
    cnt += nums[ost2]

print(cnt)

Ответ: 1 11616882

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить пару элементов этого набора, такую что 1 ≤ i+ 4 < j ≤ N  , а сумма делится на 130 и максимально возможна.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(ans)

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

f = open(’B.txt’)

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

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

# Список максимальных чисел с определенными остатками от деления на k
# Например, под индексом 3 хранится максимальное число с остатком 3
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
    # Обновляем ответ, если он больше предыдущего
    ans = max(ans, a[i] + nums[ost2])

print(ans)

Ответ: 11570 19890

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить пару элементов этого набора, такую что 1 ≤ i+ 3 < j ≤ N  , а сумма делится на 175 и максимально возможна.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(ans)

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

f = open(’B.txt’)

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

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

# Список максимальных чисел с определенными остатками от деления на k
# Например, под индексом 3 хранится максимальное число с остатком 3
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
    # Обновляем ответ, если он больше предыдущего
    ans = max(ans, a[i] + nums[ost2])

print(ans)

Ответ: 1225 199988950

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить пару элементов этого набора, такую что 1 ≤ i+ 6 < j ≤ N  , а сумма делится на 141 и максимально возможна.

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

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

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

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

f = open(’A.txt’)

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

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

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

print(ans)

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

f = open(’B.txt’)

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

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

# Список максимальных чисел с определенными остатками от деления на k
# Например, под индексом 3 хранится максимальное число с остатком 3
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
    # Обновляем ответ, если он больше предыдущего
    ans = max(ans, a[i] + nums[ost2])

print(ans)

Ответ: 18753 19881

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

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

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить пару элементов этого набора, при условии, что элементы стоят на расстоянии более 5  , то есть |i− j| > 5  , где i ⁄= j  — номера элементов последовательности, а сумма делится на 98  и минимально возможна.

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

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

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

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

f = open(’A.txt’)

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

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

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] + a[j]) % k == 0 and j - i >= s:
            ans = min(ans, a[i] + a[j])

print(ans)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Обновляем ответ, если он меньше предыдущего
    ans = min(ans, a[i] + nums[ost2])

print(ans)

Ответ: 2352 98

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить пару элементов этого набора, такую что 1 ≤ i+ 9 < j ≤ N  , а сумма делится на 128 и минимально возможна.

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

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

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

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

f = open(’A.txt’)

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

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

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] + a[j]) % k == 0 and j - i >= s:
            ans = min(ans, a[i] + a[j])

print(ans)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Обновляем ответ, если он меньше предыдущего
    ans = min(ans, a[i] + nums[ost2])

print(ans)

Ответ: 9088 128

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

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

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить пару элементов этого набора, такую что 1 ≤ i+ 6 < j ≤ N  , а сумма делится на 191 и минимально возможна.

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

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

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

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

f = open(’A.txt’)

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

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

for i in range(n):
    for j in range(i + 1, n):
        if (a[i] + a[j]) % k == 0 and j - i >= s:
            ans = min(ans, a[i] + a[j])

print(ans)

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

f = open(’B.txt’)

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

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

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

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

    # Считаем остаток, который должен быть у числа,
    # которое можно поставить в пару с текущим
    ost2 = (k - (a[i] % k)) % k
    # Обновляем ответ, если он меньше предыдущего
    ans = min(ans, a[i] + nums[ost2])

print(ans)

Ответ: 16235 191

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

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

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

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

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

10

7

13

5

4

8

3

9

2

12

7

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

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

Вложения к задаче
Показать ответ и решение
#Пункт А
f = open(’1_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
k = 0
for i in range(len(a)-1):
    for j in range(i+1,len(a)):
        if j - i <= 6:
            if (a[i]+a[j]) % 14 == 0:
                k += 1
print(k)

#Пункт B
f = open(’1_B.txt’)
n = int(f.readline())
a = []#Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию
D = 14
k = 0
for i in range(n):
    x = int(f.readline())#Считываем число из файла
    for d in a:#Проходимся по списку чисел
        if (x+d) % D == 0:
            k += 1#Увеличиваем счётчик если нашлась такая пара,сумма которой будет кратна 14
    a += [x]#Добавляем в список текущее число
    if len(a) > 6:#Если в списке больше 6-ти чисел,то удаляем тот,что добавили раньше всего
        a.pop(0)
print(k)

Ответ: 14 25808

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

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

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

В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 100 000. В качестве результата программа должна вывести одно число: максимальную сумму элементов, находящихся в последовательности на расстоянии не более чем 13, сумма элементов которой кратна 24.

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

17

7

13

5

4

8

3

9

2

12

7

14

10

31

27

5

3

17

Для указанных входных данных значением искомой суммы должно быть число 48.

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

Вложения к задаче
Показать ответ и решение
#Пункт А
f = open(’2_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = -10**20
for i in range(len(a)-1):
    for j in range(i+1,len(a)):
        if (a[i]+a[j]) % 24 == 0 and j - i <= 13:
            mx = max(mx,a[i]+a[j])
print(mx)

#Пункт B
f = open(’2_B.txt’)
n = int(f.readline())
a = []#Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию
D = 24
mx = -10**20
for i in range(n):
    x = int(f.readline())#Считываем число из файла
    for d in a:#Проходимся по списку чисел
        if (x+d) % D == 0:
            mx = max(mx,x+d)#Проверяем на максимум, если нашлась такая пара,сумма которой кратна 24
    a += [x]#Добавляем в список текущее число
    if len(a) > 13:#Если в списке больше 13-ти чисел,то удаляем тот,что добавили раньше всего
        a.pop(0)
print(mx)

Ответ: 166632 199104

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

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

На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не больше чем 10 (разница в индексах элементов пары должна быть 10 или менее, порядок элементов в паре неважен). Необходимо определить минимальную сумму пары, для которой сумма элементов делится на 7.

В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 100 000. В качестве результата программа должна вывести одно число: минимальную сумму элементов, находящихся в последовательности на расстоянии не более чем 10, сумма элементов которой кратна 7.

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

10

7

13

5

4

8

3

9

2

12

7

Для указанных входных данных значением искомой суммы должно быть число 7.

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

Вложения к задаче
Показать ответ и решение
#Пункт А
f = open(’3_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mn = 10**20
for i in range(len(a)-1):
    for j in range(i+1,len(a)):
        if (a[i]+a[j]) % 7 == 0 and j - i <= 10:
            mn = min(mn,a[i]+a[j])
print(mn)

#Пункт B
f = open(’3_B.txt’)
n = int(f.readline())
a = []#Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию
mn = 10**20
for i in range(n):
    x = int(f.readline())#Считываем число из файла
    for y in a:#Проходимся по списку чисел
        if (x + y) % 7 == 0:
            mn = min(mn,x+y)#Проверяем на минимум, если нашлась такая пара,сумма которой кратна 7
    a += [x]#Добавляем в список текущее число
    if len(a) > 10:#Если в списке больше 10-ти чисел,то удаляем тот,что добавили раньше всего
        a.pop(0)
print(mn)

Ответ: 623 357

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

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

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

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

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

16

5

13

5

41

6

13

9

2

23

7

8

19

14

4

1

21

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

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

Вложения к задаче
Показать ответ и решение
#Пункт А
f = open(’4_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
k = 0
for i in range(len(a)-1):
    for j in range(i+1,len(a)):
        if j - i <= 15 and (abs(a[i]-a[j])) % 17 == 0 and a[i] % 2 != a[j] % 2:
            k += 1
print(k)

#Пункт B
f = open(’4_B.txt’)
n = int(f.readline())
a = []#Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию
D = 17
k = 0
for i in range(n):
    x = int(f.readline())#Считываем число из файла
    for y in a:#Проходимся по списку чисел
        if (abs(x-y)) % D == 0 and x % 2 != y % 2:
            k += 1#Увеличиваем счётчик, если нашлась такая пара,разность которой будет кратна 17
            #и при этом в данной паре ровно один чётный элемент
    a += [x]#Добавляем в список текущее число
    if len(a) > 15:#Если в списке больше 15-ти чисел,то удаляем тот,что добавили раньше всего
        a.pop(0)
print(k)

Ответ: 44 4438

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

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

На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не больше чем 19 (разница в индексах элементов пары должна быть 19 или менее, порядок элементов в паре неважен). Необходимо определить максимальную сумму пары, для которой произведение элементов делится на 36.

В первой строке входных данных задаётся количество чисел N. В каждой из последующих N строк записано одно целое положительное число, не превышающее 100 000. В качестве результата программа должна вывести одно число: максимальную сумму элементов, находящихся в последовательности на расстоянии не более чем 19, произведение элементов которой кратно 36.

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

20

7

13

5

4

8

3

9

2

12

7

6

14

4

5

7

4

8

3

11

8

Для указанных входных данных значением искомой суммы должно быть число 21.

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

Вложения к задаче
Показать ответ и решение
#Пункт А
f = open(’5_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = -10**20
for i in range(len(a)-1):
    for j in range(i+1,len(a)):
        if j - i <= 19 and a[i]*a[j] % 36 == 0:
            mx = max(mx,a[i]+a[j])
print(mx)

#Пункт B
f = open(’5_B.txt’)
n = int(f.readline())
a = []#Список,в который мы будем складывать числа,к которым мы можем обращаться согласно условию
mx = -10**20
for i in range(n):
    x = int(f.readline())#Считываем число из файла
    for y in a:#Проходимся по списку чисел
        if x*y % 36 == 0:
        #Проверяем на максимум, если нашлась такая пара,произведение которой кратно 36
            mx = max(mx,x+y)
    a += [x]#Добавляем в список текущее число
    if len(a) > 19:#Если в списке больше 19-ти чисел,то удаляем тот,что добавили раньше всего
        a.pop(0)
print(mx)

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