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

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

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

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

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

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

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

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

Идея статического решения:

Разность пары кратна 98 в том случае, когда разность остатков при делении на 98 пары чисел кратна 98. Это выполняется только в одном случае, когда остатки при делении на 98 двух чисел равны. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Разность пары кратна 98 в том случае, когда разность остатков при делении на 98 пары чисел кратна 98. Это выполняется только в одном случае, когда остатки при делении на 98 двух чисел равны. Идея решения заключается в том, чтобы под каждым остатком при делении на 98 собирать количество число с одинаковым остатком при делении на 98 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Разность пары кратна 98 в том случае, когда разность остатков при делении на 98 пары чисел кратна 98. Это выполняется только в одном случае, когда остатки при делении на 98 двух чисел равны.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]-a[j]) % 98 == 0: #проверка по условию.
            counter += 1 # увеличение счётчика пар.
print(counter)#вывод ответа.

#Статическое решение
f = open("1.txt") #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
k=[0]*98 #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
for i in range(n): #проход по всему файлу
    x=int(f.readline()) #считываем текущее число
    k[x%98]+=1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 98
count = 0 #итоговое количество пар
for i in range(98): #проход по всем остаткам при делении на 98
    count+=k[i]*(k[i]-1)//2  #составляем пару из двух чисел с одинаковым остатком при делении на 98
print(count) #вывод ответа.

#Динамическое решение
file = open(’7_B__2rcti.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 98 #число, на которое нацело должна делиться разность пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    count += k[x % div] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения разности пары кратной 98
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 98
print(count) # вывод ответа

Ответ: 46 510353

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

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

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

На вход подается сначала число N, а затем N натуральных чисел – результаты работы прибора.

В качестве ответа приведите минимальную сумму для N = 12, последовательность: 38, -29, 489, 292, -348, 244, -289, 1, 43, -26, 230, 101.

Показать ответ и решение
a = [ 38, -29, 489, 292, -348, 244, -289, 1, 43, -26, 230, 101]
mi = 199999999
for i in range(12):
    for j in range(i+1, 12):
        for k in range(j+1, 12):
            if a[i] + a[j] + a[k] < mi and (a[i] + a[j] + a[k]) % 3 == 0:
                mi = a[i] + a[j] + a[k]
print(mi)

Ответ: -666

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

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

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

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

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

7

9

5

6

12

5

13

3

Для указанных чисел максимальная сумма двух элементов, кратная 11, равна 22.

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

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

Идея эффективного решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 11 собрать максимальное число с той целью, чтобы в итоге мы могли получить максимальную сумму кратную 11. Сумма пары кратна 11 в том случае, когда сумма остатков при делении на 11 пары чисел кратна 11. Считывая одно число с определенным остатком при делении на 11 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 11. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 11, а x - первое число пары.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

maxi = 0 #максимальная сумма пары.
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 11 == 0: #проверка по условию.
            maxi = max(maxi, a[i]+a[j]) # записываем максимальную сумму пары.
print(maxi) #вывод ответа.

#эффективный алгоритм:
file = open(’1_B__48rmd.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 11 #число, на которое нацело должна делиться сумма пары.
mx = [0] * div #список, в котором под каждым индексом (под каждым остатком) записано максимальное число данного остатка.
mx_sum = 0 #максимальная сумма пары
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 11 для того чтобы сумма пары делилась нацело
    mx_sum = max(mx_sum,x+mx[need_ost]) #записываем максимальную сумму пары
    mx[x % div] = max(mx[x % div],x) #записываем максимальное число под индексом равным его остатку при делении на 11, сравниваем между текущим число и тем, что было в этой ячейке ранее
print(mx_sum) #вывод ответа

Ответ: 15841991

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

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

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

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

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

7

9

5

6

13

5

15

3

Для указанных чисел максимальная сумма двух элементов, не кратная 9, равна 28.

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

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

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

f = open(’3_A.txt’)
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))

maxi = 0
for i in range(0,len(a)-1):
    for j in range(i+1,len(a)):
        if (a[i]+a[j]) % 9 != 0:
            maxi = max(maxi, a[i]+a[j])
print(maxi)

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

f = open(’3_B__2kc32.txt’)

n = int(f.readline())
mx = -1

# Список максимальных чисел с определенными остатками от деления на 9
osts = [-999_999] * 9

for i in range(n):
    # Считываем очередное число из файла
    x = int(f.readline())
    for j in range(9):
        # Проверяем на кратность 9 сумму нового числа
        # и максимального числа с определенным остатком
        if (x + osts[j]) % 9 != 0:
            # Если сумма не кратна - обновляем максимум
            mx = max(mx, x + osts[j])
    # Обновляем число с определенным остатком от деления на 9
    # Если новое число больше предыдущего - сохраняем его в список
    osts[x % 9] = max(osts[x % 9], x)

print(mx)

Ответ: 1461420000

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

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

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

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

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

7

9

5

6

12

5

13

3

Для указанных чисел максимальная сумма трех элементов, кратная 7, равна 28.

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

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

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

f = open(’5_A.txt’)
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))

maxi = 0
for i in range(0,len(a)-2):
    for j in range(i+1,len(a)-1):
        for k in range(j+1,len(a)):
            if (a[i]+a[j]+a[k]) % 7 == 0:
                maxi = max(maxi, a[i]+a[j]+a[k])
print(max)

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

f = open(’5_B__2kc2q.txt’)
n = int(f.readline())
a = [int(i) for i in f]
k = 7
# Список из максимальных чисел с определенным остатком от деления
t = [-1] * k
# Список из пар с максимальными суммами с определенным остатком
v = [[-1, -1] for i in range(k)]
mx = -1
for i in range(2, len(a)):
    # Обрабатываем элемент на расстоянии 2 от текущего (через один слева)
    ost1 = a[i - 2] % k
    # Если он больше прошлого с таким остатком - обновляем список
    t[ost1] = max(t[ost1], a[i - 2])

    # Обрабатываем средний элемент - на расстоянии 1 от текущего (слева)
    ost2 = a[i - 1] % k
    # Для каждого из максимальных первых элементов (для каждого остатка)
    # создаём новые суммы с новым средним элементом и обновляем
    # эти суммы в списке v, если они получились больше прошлых
    for j in range(k):
        if t[j] > -1:
            sm_pair = t[j] + a[i - 1]
            if sm_pair > sum(v[(j + ost2) % k]):
                v[(j + ost2) % k] = [t[j], a[i - 1]]

    # Вычисляем остаток для пары в сумму к нашему числу
    ost3 = (k - (a[i] % k)) % k
    # Если уже нашлось число с таким остатком - считаем и обновляем максимум
    if sum(v[ost3]) > -1:
        sm = a[i] + sum(v[ost3])
        if sm > mx:
            mx = sm

print(mx)

Ответ: 24992996

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

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

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

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

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

6

3

5

6

9

5

7

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

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

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

Идея статического решения:

Сумма пары кратна 5 в том случае, когда сумма остатков при делении на 5 пары чисел кратна 5. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 5 собирать количество число с одинаковым остатком при делении на 5 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 5 в том случае, когда сумма остатков при делении на 5 пары чисел кратна 5 . Считывая одно число с определенным остатком при делении на 5 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 5. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 5, а x - первое число пары.

#Переборный алгоритм:
f = open(’3_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.

counter = 0 #итоговое количество пар
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a += [int(f.readline())] #добавление текущего числа в список.

for i in range(0,len(a) - 1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 5 == 0: #проверка по условию.
            counter += 1 #увеличение счётчика пар
print(counter) #вывод ответа.

#Статическое решение:
file = open(’3_B__2l6yg.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 5 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 5
count += (k[0] * (k[0] - 1) // 2) + (k[1] * k[4]) + (k[2] * k[3]) #записываем выражение, которое посчитает итоговое количество пар
print(count) #вывод ответа.

#Динамическое решение
file = open(’3_B__2l6yg.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 5 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 5 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 5
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 5
print(count) # вывод ответа

Ответ: 40250010750

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

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

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

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

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

6

13

15

16

11

5

8

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

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

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

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

f = open(’5_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+1,len(a)):
        if (a[i]+a[j]) % 21 != 0:
            counter += 1
print(counter)

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

f = open(’3.txt’)

n = int(f.readline())
cnt = 0

# Список с количествами чисел с определенными остатками от деления на 21
osts = [0] * 21

for i in range(n):
    # Считываем очередное число из файла
    x = int(f.readline())
    for j in range(21):
        # Проверяем на кратность 21 сумму нового числа и остатка
        if (x + j) % 21 != 0:
            # Если сумма не кратна - увеличиваем счётчик количества пар
            cnt += osts[j]

    # Увеличиваем количество чисел с определенным остатком
    osts[x % 21] += 1

print(cnt)

Ответ: 7524761861543

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

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

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

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

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

6

9

7

4

2

8

3

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

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

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

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

#переборный алгоритм:
f = open(’6_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+1,len(a)):
        if (a[i]+a[j]) % 12 != 0:
            counter += 1
print(counter)

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

f = open(’4.txt’)

n = int(f.readline())
cnt = 0

# Список с количествами чисел с определенными остатками от деления на 12
osts = [0] * 12

for i in range(n):
    # Считываем очередное число из файла
    x = int(f.readline())
    for j in range(12):
        # Проверяем на кратность 12 сумму нового числа и остатка
        if (x + j) % 12 != 0:
            # Если сумма не кратна - увеличиваем счётчик количества пар
            cnt += osts[j]

    # Увеличиваем количество чисел с определенным остатком
    osts[x % 12] += 1

print(cnt)

Ответ: 16845829935

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

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

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

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

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

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

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

f = open(’5_A.txt’)

n = int(f.readline())

nums = [int(i) for i in f]

cnt = 0

for i in range(n):
    for j in range(i + 1, n):
        if (nums[i] + nums[j]) % 9 != 0:
            cnt += 1

print(cnt)

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

f = open(’5_B.txt’)

n = int(f.readline())
cnt = 0

# Список с количествами чисел с определенными остатками от деления на 9
osts = [0] * 9

for i in range(n):
    # Считываем очередное число из файла
    x = int(f.readline())
    for j in range(9):
        # Проверяем на кратность 9 сумму нового числа и остатка
        if (x + j) % 9 != 0:
            # Если сумма не кратна - увеличиваем счётчик количества пар
            cnt += osts[j]

    # Увеличиваем количество чисел с определенным остатком
    osts[x % 9] += 1

print(cnt)

Ответ: 385 44437383

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

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

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

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

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

Идея статического решения:

Разность пары кратна 177 в том случае, когда разность остатков при делении на 177 пары чисел кратна 177. Это выполняется только в одном случае, когда остатки при делении на 177 двух чисел равны. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Разность пары кратна 177 в том случае, когда разность остатков при делении на 177 пары чисел кратна 177. Это выполняется только в одном случае, когда остатки при делении на 177 двух чисел равны. Идея решения заключается в том, чтобы под каждым остатком при делении на 177 собирать количество число с одинаковым остатком при делении на 177 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Разность пары кратна 177 в том случае, когда разность остатков при делении на 177 пары чисел кратна 177. Это выполняется только в одном случае, когда остатки при делении на 177 двух чисел равны.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]-a[j]) % 177 == 0: #проверка по условию.
            counter += 1 # увеличение счётчика пар.
print(counter)#вывод ответа.

#Статическое решение
f = open("1.txt") #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
k=[0]*177 #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
for i in range(n): #проход по всему файлу
    x=int(f.readline()) #считываем текущее число
    k[x%177]+=1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 177
count = 0 #итоговое количество пар
for i in range(177): #проход по всем остаткам при делении на 177
    count+=k[i]*(k[i]-1)//2  #составляем пару из двух чисел с одинаковым остатком при делении на 177
print(count) #вывод ответа.

#Динамическое решение
file = open(’7_B__2rcti.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 177 #число, на которое нацело должна делиться разность пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    count += k[x % div] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения разности пары кратной 177
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 177
print(count) # вывод ответа

Ответ: 5520 114020130923

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

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

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

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

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

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

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 191 собрать максимальное число с той целью, чтобы в итоге мы могли получить максимальную сумму кратную 191. Сумма пары кратна 191 в том случае, когда сумма остатков при делении на 191 пары чисел кратна 191. Считывая одно число с определенным остатком при делении на 191 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 191. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 191, а x - первое число пары.

#переборный алгоритм
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

maxi = 0 #максимальная сумма пары.
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 191 == 0: #проверка по условию.
            maxi = max(maxi, a[i]+a[j]) # записываем максимальную сумму пары.
print(maxi) #вывод ответа.

#Динамическое решение
file = open(’1_B__48rmd.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 191 #число, на которое нацело должна делиться сумма пары.
mx = [0] * div #список, в котором под каждым индексом (под каждым остатком) записано максимальное число данного остатка.
mx_sum = 0 #максимальная сумма пары
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 191 для того чтобы сумма пары делилась нацело
    mx_sum = max(mx_sum,x+mx[need_ost]) #записываем максимальную сумму пары
    mx[x % div] = max(mx[x % div],x) #записываем максимальное число под индексом равным его остатку при делении на 191, сравниваем между текущим число и тем, что было в этой ячейке ранее
print(mx_sum) #вывод ответа

Ответ: 182214 199786

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

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

Дано число N, затем N натуральных чисел. Требуется найти количество пар чисел, сумма которых кратна 93.

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

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

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

Идея статического решения:

Сумма пары кратна 93 в том случае, когда сумма остатков при делении на 93 пары чисел кратна 93. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 93 собирать количество число с одинаковым остатком при делении на 93 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 93 в том случае, когда сумма остатков при делении на 93 пары чисел кратна 93 . Считывая одно число с определенным остатком при делении на 93 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 93. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 93, а x - первое число пары.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговое количество пар
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 93 == 0: #проверка по условию.
            counter += 1 # увеличение счётчика пар.
print(counter) #вывод ответа.

#Статическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 93 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 93
for i in range(len(k)//2 + 1): #делаем проход до половины всевозможных остатков при делении на 13
    if i == 0: #если остаток 0
        count += k[0] * (k[0] - 1) // 2 #то мы можем составить пару из двух чисел кратных 93
    else: # в ином случае
        count += k[i] * k[len(k)-i] #составляем пару из двух разных остатков при делении на 93
print(count) #вывод ответа.

#Динамическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 93 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 93 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 93
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 93
print(count) # вывод ответа

Ответ: 1334 52687548

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

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

Дано число N, затем N натуральных чисел. Требуется найти количество пар чисел, сумма которых кратна 375.

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

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

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

Идея статического решения:

Сумма пары кратна 375 в том случае, когда сумма остатков при делении на 375 пары чисел кратна 375. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 375 собирать количество число с одинаковым остатком при делении на 375 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 375 в том случае, когда сумма остатков при делении на 375 пары чисел кратна 375. Считывая одно число с определенным остатком при делении на 375 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 375. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 375, а x - первое число пары.

#Переборный алгоритм
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 375 == 0: #проверка по условию.
            counter += 1 # увеличение счётчика пар
print(counter) #вывод ответа.

#Статическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 375 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 375
for i in range(len(k)//2 + 1): #делаем проход до половины всевозможных остатков при делении на 375
    if i == 0: #если остаток 0
        count += k[0] * (k[0] - 1) // 2 #то мы можем составить пару из двух чисел кратных 375
    else: # в ином случае
        count += k[i] * k[len(k)-i] #составляем пару из двух разных остатков при делении на 375
print(count) #вывод ответа.

#Динамическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 375 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 375 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 375
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 375
print(count) # вывод ответа

Ответ: 54 6530490

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

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

Дано число N, затем N натуральных чисел. Требуется найти количество пар чисел, сумма которых кратна 891.

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

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

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

Идея статического решения:

Сумма пары кратна 891 в том случае, когда сумма остатков при делении на 891 пары чисел кратна 891. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 891 собирать количество число с одинаковым остатком при делении на 891 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 891 в том случае, когда сумма остатков при делении на 891 пары чисел кратна 891. Считывая одно число с определенным остатком при делении на 891 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 891. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 891, а x - первое число пары.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар.
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 891 == 0: #проверка по условию.
            counter += 1 #увеличиваем итоговый счётчик
print(counter) #вывод ответа.

#Статическое решение
file = open(’2B__3qxhl.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 891 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 891
for i in range(len(k)//2 + 1): #делаем проход до половины всевозможных остатков при делении на 891
    if i == 0: #если остаток 0
        count += k[0] * (k[0] - 1) // 2 #то мы можем составить пару из двух чисел кратных 891
    else: # в ином случае
        count += k[i] * k[len(k)-i] #составляем пару из двух разных остатков при делении на 891
print(count) #вывод ответа.

#Динамическое решение
file = open(’2B__3qxhl.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 891 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 891 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 891
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 891
print(count) # вывод ответа

Ответ: 41 1403165

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

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

Дано число N, затем N натуральных чисел. Требуется найти количество пар чисел, сумма которых кратна 221.

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

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

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

Идея статического решения:

Сумма пары кратна 221 в том случае, когда сумма остатков при делении на 221 пары чисел кратна 221. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 221 собирать количество число с одинаковым остатком при делении на 221 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 221 в том случае, когда сумма остатков при делении на 221 пары чисел кратна 221 . Считывая одно число с определенным остатком при делении на 221 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 221. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 221, а x - первое число пары.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар.
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 221 == 0: #проверка по условию.
            counter += 1 #увеличиваем итоговый счётчик
print(counter) #вывод ответа.

#Статическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 221 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 221
for i in range(len(k)//2 + 1): #делаем проход до половины всевозможных остатков при делении на 221
    if i == 0: #если остаток 0
        count += k[0] * (k[0] - 1) // 2 #то мы можем составить пару из двух чисел кратных 221
    else: # в ином случае
        count += k[i] * k[len(k)-i] #составляем пару из двух разных остатков при делении на 221
print(count) #вывод ответа.

#Динамическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 221 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 221 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 221
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 221
print(count) # вывод ответа

Ответ: 92 8142930

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

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

Дано число N, затем N натуральных чисел. Требуется найти количество пар чисел, сумма которых кратна 457.

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

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

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

Идея статического решения:

Сумма пары кратна 457 в том случае, когда сумма остатков при делении на 457 пары чисел кратна 457. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 457 собирать количество число с одинаковым остатком при делении на 457 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 457 в том случае, когда сумма остатков при делении на 457 пары чисел кратна 457. Считывая одно число с определенным остатком при делении на 457 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 457. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 457, а x - первое число пары.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар.
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 457 == 0: #проверка по условию.
            counter += 1 #увеличиваем итоговый счётчик
print(counter) #вывод ответа.

#Статическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 457 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 457
for i in range(len(k)//2 + 1): #делаем проход до половины всевозможных остатков при делении на 457
    if i == 0: #если остаток 0
        count += k[0] * (k[0] - 1) // 2 #то мы можем составить пару из двух чисел кратных 457
    else: # в ином случае
        count += k[i] * k[len(k)-i] #составляем пару из двух разных остатков при делении на 457
print(count) #вывод ответа.

#Динамическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 457 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 457 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 457
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 457
print(count) # вывод ответа

Ответ: 134 2522565

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

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

Дано число N, затем N натуральных чисел. Требуется найти количество пар чисел, сумма которых кратна 199.

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

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

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

Идея статического решения:

Сумма пары кратна 199 в том случае, когда сумма остатков при делении на 199 пары чисел кратна 199. Идея заключается в том, что мы сначала совершим проход по файлу, в котором посчитаем количество чисел под каждым остатком. Затем, используя знания комбинаторики, нужно записать выражение, которое посчитает итоговое количество пар.

Идея динамического решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 199 собирать количество число с одинаковым остатком при делении на 199 с той целью, чтобы в итоге мы могли на каждой итерации получать итоговое количество пар на данный момент. Сумма пары кратна 199 в том случае, когда сумма остатков при делении на 199 пары чисел кратна 199. Считывая одно число с определенным остатком при делении на 199 мы должны подобрать в пару ему такое число, чтобы в итоге их пара была кратна 199. Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 199, а x - первое число пары.

#переборный алгоритм:
f = open(’1_A.txt’) #открываем файл.
n = int(f.readline()) #считываем первое число - количество чисел в файле.
a = [] #cписок, в котором у нас будут находиться все числа файла.
for i in range(n): #проход по файлу.
    a.append(int(f.readline())) #добавление текущего числа в список.

counter = 0 #итоговый счётчик пар.
for i in range(0,len(a)-1): #перебор для первого числа пары.
    for j in range(i+1,len(a)): #перебор для второго числа пары.
        if (a[i]+a[j]) % 199 == 0: #проверка по условию.
            counter += 1 #увеличиваем итоговый счётчик
print(counter) #вывод ответа.

#Статическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 199 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 199
for i in range(len(k)//2 + 1): #делаем проход до половины всевозможных остатков при делении на 199
    if i == 0: #если остаток 0
        count += k[0] * (k[0] - 1) // 2 #то мы можем составить пару из двух чисел кратных 199
    else: # в ином случае
        count += k[i] * k[len(k)-i] #составляем пару из двух разных остатков при делении на 199
print(count) #вывод ответа.

#Динамическое решение
file = open(’4_B__2l6y2.txt’) #открываем файл.
n = int(file.readline()) #считываем первое число - количество чисел в файле.
div = 199 #число, на которое нацело должна делиться сумма пары.
k = [0] * div #список, в котором под каждым индексом (под каждым остатком) будет записано количество чисел с таким остатком.
count = 0 #итоговое количество пар
for i in range(n): #проход по всему файлу
    x = int(file.readline()) #считываем текущее число
    need_ost = (div - x % div) % div #определяем необходимый остаток второго числа при делении на 199 для того чтобы сумма пары делилась нацело
    count += k[need_ost] #увеличиваем count на количество чисел с необходимым остатком для первого числа для получения суммы пары кратной 199
    k[x % div] += 1 #увеличиваем на 1 ячейку в списке k равную остатку текущего числа при делении на 199
print(count) # вывод ответа

Ответ: 96 9045539

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

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

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

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

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

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

Идея эффективного решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 139 собрать максимальное число для того чтобы в итоге получить максимальную сумму пары. Сумма пары кратна 139 в том случае, когда сумма остатков при делении на 139 пары чисел кратна 139. Проходясь по файлу, мы будем искать для текущего числа подбирать такое число, с которым в сумме с ним будет кратна 139. Число, которое мы считываем на текущей итераций всегда будет вторым в паре (j индекс). Числа, которые уже записаны в списке - всегда будут первыми в паре(i индекс). Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 139, а x - первое число пары.

#Переборный алгоритм
f = open(’27A_1.txt’) #открытие файла
n = int(f.readline()) #считываем первое число - количество чисел в файле
arr = list(map(int, f.read().split())) #записываем все числа файла в список
mx = -1 # максимальная сумма пары
for i in range(n-1): # перебор для первого числа пары
    for j in range(i+1, n): # перебор для второго числа пары
        if arr[i] < arr[j] and arr[i] + arr[j] > mx and (arr[i] + arr[j]) % 139 == 0: # проверка по условию
            mx = arr[i] + arr[j] # обновляем максимальную сумму
print(mx) # вывод ответа

#Эффективный алгоритм
file = open(’27B_1__3shr0.txt’) #открытие файла
n = int(file.readline()) #считываем первое число - количество чисел в файле
div = 139 # наш делитель
mx = [0]*div # список, в котором будет храниться максимальное число под каждым остатком при делении на 139
mx_sum = 0 # максимальная сумма пары
for i in range(n): # проход по всему файлу
    x = int(file.readline()) # считываем текущее число
    need_ost = (div - x % div) % div # определяем необходимый остаток для второго числа чтобы в итоге получилась пара кратная 139
    if x > mx[need_ost]: # если второе число в паре больше первого
        mx_sum = max(mx_sum,x+mx[need_ost]) # то обновляем максимальную сумму
    mx[x % div] = max(mx[x % div],x) # обновляем максимальное число под определенным остатком, сравнивая текущее число с тем, что было записано в ячейке ранее.
print(mx_sum) # вывод ответа

Ответ: 1946 19877

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

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

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

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

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

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

Идея эффективного решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 224 собрать минимальное число для того чтобы в итоге получить минимальную сумму пары. Сумма пары кратна 224 в том случае, когда сумма остатков при делении на 224 пары чисел кратна 224. Проходясь по файлу, мы будем искать для текущего числа подбирать такое число, с которым в сумме с ним будет кратна 224. Число, которое мы считываем на текущей итерации всегда будет вторым в паре (j индекс). Числа, которые уже записаны в списке - всегда будут первыми в паре(i индекс). Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 224, а x - первое число пары.

f = open(’27A_2.txt’) #открытие файла
n = int(f.readline()) #считываем первое число - количество чисел в файле
arr = list(map(int, f.read().split())) #записываем все числа файла в список
mn = 10000000 минимальная сумма пары
for i in range(n-1): # перебор для первого числа пары
    for j in range(i+1, n): # перебор для второго числа пары
        if arr[i] < arr[j] and arr[i] + arr[j] < mn and (arr[i] + arr[j]) % 224 == 0: # проверка по условию
            mn = arr[i] + arr[j] # обновляем минимальную сумму
print(mn) # вывод ответа

Решение для файла B:

#Эффективный алгоритм
file = open(’27B_2__3shra.txt’) #открытие файла
n = int(file.readline()) #считываем первое число - количество чисел в файле
div = 224 # наш делитель
mn = [10**10]*div # список, в котором будет храниться минимальное число под каждым остатком при делении на 224
mn_sum = 10**10 # минимальная сумма пары
for i in range(n): # проход по всему файлу
    x = int(file.readline()) # считываем текущее число
    need_ost = (div - x % div) % div # определяем необходимый остаток для второго числа чтобы в итоге получилась пара кратная 224
    if x > mn[need_ost]: # если второе число в паре больше первого
        mn_sum = min(mn_sum,x+mn[need_ost]) # то обновляем минимальную сумму
    mn[x % div] = min(mn[x % div],x) # обновляем минимальное число под определенным остатком, сравнивая текущее число с тем, что было записано в ячейке ранее.
print(mn_sum) # вывод ответа

Ответ: 224 2016

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

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

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности такие что 1 ≤ i < j ≤ N  и ai > aj  , при этом оба числа должны быть больше 45. Необходимо определить минимальную сумму среди всех пар, которая будет кратна 63.

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

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

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

Идея эффективного решения:

Идея решения заключается в том, чтобы под каждым остатком при делении на 63 собрать минимальное число бОльшее 45 для того чтобы в итоге получить минимальную сумму пары. Сумма пары кратна 63 в том случае, когда сумма остатков при делении на 63 пары чисел кратна 63. Проходясь по файлу,мы сначала будем проверять, что число бОльше 45,а затем мы будем искать для текущего числа подбирать такое число, с которым в сумме с ним будет кратна 63. Число, которое мы считываем на текущей итерации всегда будет вторым в паре (j индекс). Числа, которые уже записаны в списке - всегда будут первыми в паре(i индекс). Не трудно определить какой остаток нужен для второго числа при делении, зная, остаток первого числа, для этого можно использовать формулу: (D - x % D) % D , где D - это 63, а x - первое число пары.

f = open(’27A_3.txt’) #открытие файла
n = int(f.readline()) #считываем первое число - количество чисел в файле
arr = list(map(int, f.read().split())) #список, в котором будут записаны все числа файла
mn = 10000000 #минимальная сумма пары
for i in range(n-1): #перебор для первого числа пары
    for j in range(i+1, n):#перебор для второго числа пары
        if arr[i] > arr[j] and arr[i] + arr[j] < mn and (arr[i] + arr[j]) % 63 == 0 and arr[i] > 45 and arr[j] > 45: #проверка по условию
            mn = arr[i] + arr[j] # обновление минимальной суммы
print(mn) #вывод ответа.

#Эффективный алгоритм
file = open(’27B_3__3shrm.txt’) #открытие файла
n = int(file.readline()) #считываем первое число - количество чисел в файле
div = 63 # наш делитель
mn = [10**10]*div # список, в котором будет храниться минимальное число под каждым остатком при делении на 63
mn_sum = 10**10 # минимальная сумма пары
for i in range(n): # проход по всему файлу
    x = int(file.readline()) # считываем текущее число
    need_ost = (div - x % div) % div # определяем необходимый остаток для второго числа чтобы в итоге получилась пара кратная 63
    if x > mn[need_ost] and x > 45: # если второе число в паре больше первого, а также, что число больше 45
        mn_sum = min(mn_sum,x+mn[need_ost]) # то обновляем минимальную сумму
    if x > 45: # если текущее число больше 45
        mn[x % div] = min(mn[x % div],x) # обновляем минимальное число под определенным остатком, сравнивая текущее число с тем, что было записано в ячейке ранее.
print(mn_sum) # вывод ответа

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