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

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

Задача 1#87557

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 41 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_10B.txt’)
n = int(f.readline())
s = 0
#массив для хранения минимальных разностей
mr = [1000000000500000000000]*41
for i in range(n):
    #пара чисел из файла
    a, b = map(int, f.readline().split())
    #добавляем к сумме минимальное число из пары
    s += min(a, b)
    d = abs(a-b) #разница между числами в паре
    mr1 = mr[:]   #копия массива минимальных разностей
    #проходимся по всем остаткам от деления на 41
    for j in range(41):
        #если сумма разницы и элемента массива меньше элемента в массиве,
        #обновляем элемент в массиве
        if d + mr1[j] < mr[(d+mr1[j]) % 41]:
            mr[(d+mr1[j]) % 41] = d + mr1[j]
    #если разница меньше элемента в массиве, обновляем элемент
    if d < mr[d % 41]:
        mr[d % 41] = d
#если сумма делится на 41, выводим ее
if s % 41 == 0:
    print(s)
else:# проходимся по всем элементам массива минимальных разностей
    for i in range(41):
    #если сумма с текущим элементом массива делится на 41,
    #выводим это значение
        if (s + mr[i]) % 41 == 0:
            print(s + mr[i])

Ответ: 483759 2596328198

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

Задача 2#87556

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел делилась на 37 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи.

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_9B.txt’)
n = int(f.readline())
#массив для хранения минимальных сумм
mr = [10000000000] * 37
#начальная сумма для 0 равна 0
mr[0] = 0
for i in range(n):
    a, b, c = list(map(int, f.readline().split()))
    #временный массив для хранения минимальных сумм
    mr1 = [10000000000] * 37
    #проходимся по всем суммам в массиве mr
    for j in range(37):
        #обновляем минимальную сумму для каждого остатка от деления суммы на 37,
        #добавляя к текущей сумме каждое из чисел из тройки и сохраняя минимальность
        mr1[(mr[j] + a) % 37] = min(mr1[(mr[j] + a) % 37], mr[j] + a)
        mr1[(mr[j] + b) % 37] = min(mr1[(mr[j] + b) % 37], mr[j] + b)
        mr1[(mr[j] + c) % 37] = min(mr1[(mr[j] + c) % 37], mr[j] + c)
    #обновляем массив mr новыми минимальными суммами по модулю 37
    mr = mr1.copy()
#выводим минимальную сумму для остатка 0
print(mr[0])

Ответ: 49395 46611305

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

Задача 3#87555

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки два числа так, чтобы сумма всех выбранных чисел делилась на 190 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_8B.txt’)
n = int(f.readline())
s = [0]#список, в котором мы будем записывать промежуточные суммы на каждом шаге
D = 190#наш делитель
for i in range(n):
    troika = sorted((map(int,f.readline().split())))#считываем текущую строку
    #образуем всевозможные суммы, которые можно сделать на текущей строке с учетом того, что берем ровно два числа
    s = [a + troika[j] + troika[k] for a in s for j in range(len(troika)-1) for k in range(j+1,len(troika))]
    s = {x % D:x for x in sorted(set(s))}.values()
    #Словарь в качестве ключа которого остаток суммы при делении на D и в качестве значения cама сумма.
    #Поскольку x проходится по отсортированному по возрастанию списку s,
    #то максимальные суммы текущей строки с определенным остатком при делении на D
    #перезапишут минимальные суммы текущей строки с таким же остатком при делении на D.
    #Данная конструкция позволяет значительно уменьшить количество значений сумм в списке s,
    #поскольку мы оставляем только максимальные суммы под определенным остатком при делении на D.
    #длина списка s всегда будет меньше или равна D. Сам метод решения называется метод частичных сумм.
print([x for x in s if x % D == 0])#Вывод значения, которое кратно 190

Ответ: 3425320 1004734820

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

Задача 4#87554

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки два числа так, чтобы сумма всех выбранных чисел не делилась на 15 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_7B.txt’)
n = int(f.readline())
s = 0
#минимальная разность
mr = 1000050000000
for i in range(n):
    #тройка чисел из файла в порядке возрастания
    a = sorted(map(int, f.readline().split()))
    #сумма двух наибольших чисел из тройки
    s += a[1] + a[2]
    #проверяем разницу между наименьшим и средним числом в тройке,
    #и обновляем минимальную разницу, исключая деление на 15
    if (a[1] - a[0] < mr) and ((a[1] - a[0]) % 15 != 0):
        mr = a[1] - a[0]
    #проверяем разницу между наименьшим и средним числом в тройке,
    #и обновляем минимальную разницу, исключая деление на 15
    if (a[2] - a[0] < mr) and ((a[2] - a[0]) % 15 != 0):
        mr = a[2] - a[0]
#проверяем, делится ли сумма на 15
if s % 15 != 0:
    #если нет, выводим сумму
    print(s)
else:
    #если да, вычитаем минимальную разницу из суммы и выводим
    s -= mr
    print(s)

Ответ: 58284 125061935

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

Задача 5#87552

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 23 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_6B.txt’)
n = int(f.readline())
s = 0
#массив для хранения минимальных разностей
mr = [1000000000500000000000]*23
for i in range(n):
    #пара чисел из файла
    a, b = map(int, f.readline().split())
    #добавляем к сумме минимальное число из пары
    s += min(a, b)
    #разница между числами в паре
    d = abs(a-b)
    #копия массива минимальных разностей
    mr1 = mr[:]
    #проходимся по всем остаткам от деления на 23
    for j in range(23):
        #если сумма разницы и элемента массива меньше элемента в массиве,
        #обновляем элемент в массиве
        if d + mr1[j] < mr[(d + mr1[j]) % 23]:
            mr[(d + mr1[j]) % 23] = d + mr1[j]
    #если разница меньше элемента в массиве, обновляем элемент
    if d < mr[d % 23]:
        mr[d % 23] = d
# проходимся по всем элементам массива минимальных разностей
for i in range(23):
    #если сумма с текущим элементом массива делится на 23,
    #выводим это значение
    if (s + mr[i]) % 23 == 0:
        print(s + mr[i])

Ответ: 1302812 3337372013

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

Задача 6#87551

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 17 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_5B.txt’)
n = int(f.readline())
s = 0
#массив для хранения минимальных разностей
mr = [1000000000500000000000]*17
for i in range(n):
    #считываем пару чисел из файла
    a, b = map(int, f.readline().split())
    #добавляем к сумме максимальное число из пары
    s += max(a, b)
    #разница между числами в паре
    d = abs(a-b)
    #копия массива минимальных разностей
    mr1 = mr[:]
    #проходимся по всем остаткам от деления на 17
    for j in range(17):
        #если сумма разницы и элемента массива меньше элемента в массиве,
        #обновляем элемент в массиве
        if d + mr1[j] < mr[(d + mr1[j]) % 17]:
            mr[(d + mr1[j]) % 17] = d + mr1[j]
    #если разница меньше элемента в массиве, обновляем элемент
    if d < mr[d % 17]:
        mr[d % 17] = d
#проверяем, делится ли сумма на 17
if s % 17 != 0:
    #если нет, вычитаем соответствующий элемент из массива минимальных разностей
    s -= mr[s % 17]
#выводим максимально возможную сумму
print(s)

Ответ: 203116 667081224

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

Задача 7#87550

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел оканчивалась на 7 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_4B.txt’)
n = int(f.readline())
s = 0
#массив для хранения минимальных разностей
mr = [1000000000500000000000]*10
for i in range(n):
    #пара чисел из файла
    a, b = map(int, f.readline().split())
    #добавление к сумме максимального числа из пары
    s += max(a, b)
    #разница между числами в паре
    d = abs(a - b)
    #копия массива минимальных разностей
    mr1 = mr[:]
    #проходимся по всем остаткам от деления на 10
    for j in range(10):
        #если сумма разницы и элемента массива меньше элемента в массиве,
        #обновляем элемент в массиве
        if d + mr1[j] < mr[(d + mr1[j]) % 10]:
            mr[(d + mr1[j]) % 10] = d + mr1[j]
    #если разница меньше элемента в массиве, обновляем элемент
    if d < mr[d % 10]:
        mr[d % 10] = d
#проходимся по всем элементам массива минимальных разностей
for i in mr:
    #если сумма минус текущий элемент массива оканчивается на 7,
    #выводим это значение
    if (s - i) % 10 == 7:
        print(s - i)

Ответ: 262307 266822407

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

Задача 8#87549

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 245 и при этом была нечетной и максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимальную возможную сумму, соответствующую условиям задачи

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_3B.txt’)
n = int(f.readline())
s = 0
mn = 100000050000000 #минимальная разность
for i in range(n):
    a,b,c = f.readline().split() #чтение троек
    a, b, c = int(a), int(b), int(c)
    s += max(a, b, c) #сумма максимальных чисел троек
    #разность между максимальным и минимальным числами в тройке
    d1 = max(a, b, c) - min(a, b, c)
    #среднее число тройки
    mid = a+b+c-max(a, b, c) - min(a, b, c)
    #разность между максимальным и средним числами в тройке
    d2 = max(a, b, c) - mid
    #если первая разность не кратна 245
    if d1%245!=0 and d1 % 2 != 0:
        mn = min(mn, d1) #обновляем минимальную разность
    #если вторая разность не кратна 245
    if d2%245!=0 and d2 % 2 != 0:
        mn = min(mn, d2) #обновляем минимальную разность
#если итоговая сумма не кратна 245 и нечетна, выводим ее
if s % 245 != 0 and s % 2 != 0:
    print(s)
else: #иначе отнимаем минимальную разность, чтобы получилось некратное число
    print(s-mn)

Ответ: 1551933 149919107

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

Задача 9#87548

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 152 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_2B.txt’)
n = int(f.readline())
s = 0
mn = 100000050000000 #минимальная разность
for i in range(n):
    a,b,c = f.readline().split()
    a, b, c = int(a), int(b), int(c)
    s += min(a, b, c) #сумма минимальных чисел троек
    #разность между максимальным и минимальным числами в тройке
    d1 = max(a, b, c) - min(a, b, c)
    #среднее число тройки
    mid = a+b+c-max(a, b, c) - min(a, b, c)
    #разность между максимальным и средним числами в тройке
    d2 = max(a, b, c) - mid
    #если первая разность не кратна 152
    if d1%152!=0:
        mn = min(mn, d1) #обновляем минимальную разность
    #если вторая разность не кратна 152
    if d2%152!=0:
        mn = min(mn, d2) #обновляем минимальную разность
#если итоговая сумма не кратна 152, выводим ее
if s%152!=0:
    print(s)
else: #иначе отнимаем минимальную разность, чтобы получилось некратное число
    print(s-mn)

Ответ: 260565 1004316853

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

Задача 10#87470

Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 143 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимальную возможную сумму, соответствующую условиям задачи

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

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

Вложения к задаче
Показать ответ и решение
f = open(’27_1B.txt’)
n = int(f.readline())
s = 0
mn = 100000050000000 #минимальная разность
for i in range(n):
    a,b,c = f.readline().split() #чтение троек
    a, b, c = int(a), int(b), int(c)
    s += max(a, b, c) #сумма максимальных чисел троек
    #разность между максимальным и минимальным числами в тройке
    d1 = max(a, b, c) - min(a, b, c)
    #среднее число тройки
    mid = a+b+c-max(a, b, c) - min(a, b, c)
    #разность между максимальным и средним числами в тройке
    d2 = max(a, b, c) - mid
    #если первая разность не кратна 143
    if d1%143!=0:
        mn = min(mn, d1) #обновляем минимальную разность
    #если вторая разность не кратна 143
    if d2%143!=0:
        mn = min(mn, d2) #обновляем минимальную разность
#если итоговая сумма не кратна 143, выводим ее
if s%143!=0:
    print(s)
else: #иначе отнимаем минимальную разность, чтобы получилось некратное число
    print(s-mn)

Ответ: 249668 749705613

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

Задача 11#87107

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 14 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.

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

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

Идея решения: Так как нужно получить минимальную разницу, то будем выбирать из каждой пары максимальное число, не обращая внимания на кратность. Если итоговая сумма получилась кратной 14, то необходимо заменить одно выбранное число другим числом из пары, при этом заменить нужно так, чтобы итоговая сумма уменьшилась минимально. Для этого на каждом шаге будем сохранять минимальную разницу между элементами пары, такую что разница не кратна 14, потому что если разница будет кратна 14, то замена не даст другой кратности у итоговой суммы.

f = open(’27B_pairs_6.txt’)
n = int(f.readline())
s = 0
d = 14 # делитель
# переменная для хранения минимальной разницы между числами пары
mr = 1000000500000
for i in range(n):
    # считываем числа
    a, b = map(int, f.readline().split())
    # для того чтобы итоговая сумма получилась минимальной берем минимальное из пары
    s += max(a, b)
    # обновляем минимальную разницу НЕ кратную 14
    if (abs(a-b) < mr) and (abs(a-b) % d != 0):
        mr = abs(a-b)
# если результирующая сумма получилась кратной 14, то прибавляем разницу
if s % d == 0:
    s -= mr
print(s)

Ответ: 21579 355324549

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

Задача 12#87106

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 5 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — минимально возможную сумму, соответствующую условиям задачи.

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

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

Идея решения: Так как нужно получить минимальную разницу, то будем выбирать из каждой пары минимальное число, не обращая внимания на кратность. Если итоговая сумма получилась кратной 5, то необходимо заменить одно выбранное число другим числом из пары, при этом заменить нужно так, чтобы итоговая сумма увеличилась минимально. Для этого на каждом шаге будем сохранять минимальную разницу между элементами пары, такую что разница не кратна 5, потому что если разница будет кратна 5, то замена не даст другой кратности у итоговой суммы.

f = open(’27B_pairs_5.txt’)
n = int(f.readline())
s = 0
d = 5 # делитель
# переменная для хранения минимальной разницы между числами пары
mr = 1000000500000
for i in range(n):
    # считываем числа
    a, b = map(int, f.readline().split())
    # для того чтобы итоговая сумма получилась минимальной берем минимальное из пары
    s += min(a, b)
    # обновляем минимальную разницу НЕ кратную 5
    if (abs(a-b) < mr) and (abs(a-b) % d != 0):
        mr = abs(a-b)
# если результирующая сумма получилась кратной 5, то прибавляем разницу
if s % d == 0:
    s += mr
print(s)

Ответ: 51581 240661246

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

Задача 13#87105

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 16 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.

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

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

Идея решения: Так как нужно получить минимальную разницу, то будем выбирать из каждой пары максимальное число, не обращая внимания на кратность. Если итоговая сумма получилась кратной 16, то необходимо заменить одно выбранное число другим числом из пары, при этом заменить нужно так, чтобы итоговая сумма уменьшилась минимально. Для этого на каждом шаге будем сохранять минимальную разницу между элементами пары, такую что разница не кратна 16, потому что если разница будет кратна 16, то замена не даст другой кратности у итоговой суммы.

f = open(’27A_pairs_4.txt’)
n = int(f.readline())
s = 0
d = 16 # делитель
# переменная для хранения минимальной разницы между числами пары
mr = 1000000500000
for i in range(n):
    # считываем числа
    a, b = map(int, f.readline().split())
    # для того чтобы итоговая сумма получилась минимальной берем минимальное из пары
    s += max(a, b)
    # обновляем минимальную разницу НЕ кратную 16
    if (abs(a-b) < mr) and (abs(a-b) % d != 0):
        mr = abs(a-b)
# если результирующая сумма получилась кратной 16, то прибавляем разницу
if s % d == 0:
    s -= mr
print(s)

Ответ: 144973 617084463

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

Задача 14#87104

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 2 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — минимально возможную сумму, соответствующую условиям задачи.

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

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

Идея решения: Так как нужно получить минимальную разницу, то будем выбирать из каждой пары минимальное число, не обращая внимания на кратность. Если итоговая сумма получилась кратной 2, то необходимо заменить одно выбранное число другим числом из пары, при этом заменить нужно так, чтобы итоговая сумма увеличилась минимально. Для этого на каждом шаге будем сохранять минимальную разницу между элементами пары, такую что разница не кратна 2, потому что если разница будет кратна 2, то замена не даст другой кратности у итоговой суммы.

f = open(’27B_pairs_3.txt’)
n = int(f.readline())
s = 0
d = 2 # делитель
# переменная для хранения минимальной разницы между числами пары
mr = 1000000500000
for i in range(n):
    # считываем числа
    a, b = map(int, f.readline().split())
    # для того чтобы итоговая сумма получилась минимальной берем минимальное из пары
    s += min(a, b)
    # обновляем минимальную разницу НЕ кратную 2
    if (abs(a-b) < mr) and (abs(a-b) % d != 0):
        mr = abs(a-b)
# если результирующая сумма получилась кратной 2, то прибавляем разницу
if s % d == 0:
    s += mr
print(s)

Ответ: 196167 259491639

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

Задача 15#87103

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 31 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.

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

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

Идея решения: Так как нужно получить минимальную разницу, то будем выбирать из каждой пары максимальное число, не обращая внимания на кратность. Если итоговая сумма получилась кратной 31, то необходимо заменить одно выбранное число другим числом из пары, при этом заменить нужно так, чтобы итоговая сумма уменьшилась минимально. Для этого на каждом шаге будем сохранять минимальную разницу между элементами пары, такую что разница не кратна 31, потому что если разница будет кратна 31, то замена не даст другой кратности у итоговой суммы.

f = open(’27B_pairs_2.txt’)
n = int(f.readline())
s = 0
d = 31 # делитель
# переменная для хранения минимальной разницы между числами пары
mr = 1000000500000
for i in range(n):
    # считываем числа
    a, b = map(int, f.readline().split())
    # для того чтобы итоговая сумма получилась минимальной берем минимальное из пары
    s += max(a, b)
    # обновляем минимальную разницу НЕ кратную 31
    if (abs(a-b) < mr) and (abs(a-b) % d != 0):
        mr = abs(a-b)
# если результирующая сумма получилась кратной 31, то прибавляем разницу
if s % d == 0:
    s -= mr
print(s)

Ответ: 472469 415710030

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

Задача 16#87102

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 18 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — минимально возможную сумму, соответствующую условиям задачи.

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

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

Решение Идея решения: Так как нужно получить минимальную разницу, то будем выбирать из каждой пары минимальное число, не обращая внимания на кратность. Если итоговая сумма получилась кратной 18, то необходимо заменить одно выбранное число другим числом из пары, при этом заменить нужно так, чтобы итоговая сумма увеличилась минимально. Для этого на каждом шаге будем сохранять минимальную разницу между элементами пары, такую что разница не кратна 18, потому что если разница будет кратна 18, то замена не даст другой кратности у итоговой суммы.

f = open(’27B_pairs_1.txt’)
n = int(f.readline())
s = 0
d = 18 # делитель
# переменная для хранения минимальной разницы между числами пары
mr = 1000000500000
for i in range(n):
    # считываем числа
    a, b = map(int, f.readline().split())
    # для того чтобы итоговая сумма получилась минимальной берем минимальное из пары
    s += min(a, b)
    # обновляем минимальную разницу НЕ кратную 18
    if (abs(a-b) < mr) and (abs(a-b) % d != 0):
        mr = abs(a-b)
# если результирующая сумма получилась кратной 18, то прибавляем разницу
if s % d == 0:
    s += mr
print(s)

Ответ: 296048 138394261

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

Задача 17#76592

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 119 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи.

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

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

6

112 321

542 191

664 922

513 484

348 123

1 14

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

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

Вложения к задаче
Показать ответ и решение
f = open(’1.txt’)
n = int(f.readline())
krat = 119
mr = [100000000500000000]*krat
s = 0
for i in range(n):
    a,b = map(int, f.readline().split())
    s += min(a, b)
    d = abs(a-b)
    mr1 = mr[:] #копия mr
    for j in range(krat):
        #берем разность и складываем с каждым элементом списка mr1
        #сравниваем получившуюся сумму с mr
        #если она меньше, то записываем данную сумму в mr
        if d + mr1[j] < mr[(d+mr[j]) % krat]:
            mr[(d+mr[j]) % krat] = d + mr1[j]
    #проверка, что если разность меньше соответствующего элемента в списке
    #то записываем эту разность в список
    if d < mr[d % krat]:
        mr[d % krat] = d

#Если сумма s не делится на krat, то сумма корректируется
#путем добавления значения из mr[krat - s % krat]
if s % krat != 0:
    s += mr[krat - s % krat]
print(s)

Ответ: 16303 173521278

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

Задача 18#76591

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 123 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

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

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

6

112 321

542 191

664 922

513 484

348 123

12 14

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

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

Вложения к задаче
Показать ответ и решение
f = open(’1.txt’)
n = int(f.readline())
krat = 123
mr = [100000000500000000]*krat
s = 0
for i in range(n):
    a,b = map(int, f.readline().split())
    s += max(a, b)
    d = abs(a-b)
    mr1 = mr[:] #копия mr
    for j in range(krat):
        #берем разность и складываем с каждым элементом списка mr1
        #сравниваем получившуюся сумму с mr
        #если она меньше, то записываем данную сумму в mr
        if d + mr1[j] < mr[(d+mr[j]) % krat]:
            mr[(d+mr[j]) % krat] = d + mr1[j]
    #проверка, что если разность меньше соответствующего элемента в списке
    #то записываем эту разность в список
    if d < mr[d % krat]:
        mr[d % krat] = d

#Если сумма s не делится на krat, то сумма корректируется
#путем вычитания значения из mr[s % krat]
if s % krat != 0:
    s -= mr[s % krat]
print(s)

Ответ: 33948 160097046

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

Задача 19#76590

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 43 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – минимально возможную сумму, соответствующую условиям задачи.

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

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

6

11 31

52 11

64 92

53 44

38 23

1 1

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

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

Вложения к задаче
Показать ответ и решение
f = open(’1.txt’)
n = int(f.readline())
krat = 43
mr = [100000000500000000]*krat
s = 0
for i in range(n):
    a,b = map(int, f.readline().split())
    s += min(a, b)
    d = abs(a-b)
    mr1 = mr[:] #копия mr
    for j in range(krat):
        #берем разность и складываем с каждым элементом списка mr1
        #сравниваем получившуюся сумму с mr
        #если она меньше, то записываем данную сумму в mr
        if d + mr1[j] < mr[(d+mr[j]) % krat]:
            mr[(d+mr[j]) % krat] = d + mr1[j]
    #проверка, что если разность меньше соответствующего элемента в списке
    #то записываем эту разность в список
    if d < mr[d % krat]:
        mr[d % krat] = d

#Если сумма s не делится на krat, то сумма корректируется
#путем добавления значения из mr[krat - s % krat]
if s % krat != 0:
    s += mr[krat - s % krat]
print(s)

Ответ: 17544 80761224

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

Задача 20#76589

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 11 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

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

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

6

1 3

5 11

6 9

5 4

3 3

1 1

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

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

Вложения к задаче
Показать ответ и решение
f = open(’1.txt’)
n = int(f.readline())
krat = 11
mr = [100000000500000000]*krat
s = 0
for i in range(n):
    a,b = map(int, f.readline().split())
    s += max(a, b)
    d = abs(a-b)
    mr1 = mr[:] #копия mr
    for j in range(krat):
        #берем разность и складываем с каждым элементом списка mr1
        #сравниваем получившуюся сумму с mr
        #если она меньше, то записываем данную сумму в mr
        if d + mr1[j] < mr[(d+mr[j]) % krat]:
            mr[(d+mr[j]) % krat] = d + mr1[j]
    #проверка, что если разность меньше соответствующего элемента в списке
    #то записываем эту разность в список
    if d < mr[d % krat]:
        mr[d % krat] = d

#Если сумма s не делится на krat, то сумма корректируется
#путем вычитания значения из mr[s % krat]
if s % krat != 0:
    s -= mr[s % krat]
print(s)

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