Тема 27. Программирование – оптимизация по времени и по памяти

27.05 Пары, произведение, сумма, расстояние, хотя бы одно…

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

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

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

Имеется набор данных, состоящий из пар натуральных чисел. Каждая пара чисел представляет собой баллы за ЕГЭ по информатике(1 число) и математике(2 число), соответственно 100 баллов максимум. Необходимо составить рейтинг 5 лучших учеников исходя из их суммы баллов. Программа должна напечатать пять чисел — 5 сумм баллов учеников по убыванию начиная с максимальной.

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

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

5

100 50

30 49

88 79

90 90

79 48

Для указанных входных данных выходными значениями должны быть 180 167 150 127 79.

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
ans = []  
for i in range(n):  
    a, b = map(int, input().split())  
    ans.append(a+b)  
print(*sorted(ans)[::-1][:5])

Ответ: 196 196 160 148 140 198 198 198 198 198

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

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

Имеется набор данных, состоящий из пар натуральных чисел. Каждая пара чисел представляет собой баллы за ЕГЭ по информатике(1 число) и физике(2 число), соответственно 100 баллов максимум. Необходимо подсчитать, сколько отличников по этим двум предметам есть в списке. Отличная оценка по физике начинается от 68 баллов, по информатике от 73. Программа должна напечатать одно число — количество, соответствующее условиям задачи.

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

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

5

100 50

30 49

88 79

90 90

79 48

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

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
ans = 0  
for i in range(n):  
    a, b = map(int, input().split())  
    if b >= 68 and a >= 73:  
        ans += 1  
print(ans)

Ответ: 2 346

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

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

Имеется набор данных, состоящий из пар натуральных чисел. Каждая пара чисел представляет собой средние баллы за все ЕГЭ мальчиков(1 число) и девочек(2 число) из N-ой городской школы, соответственно 100 баллов максимум.

Необходимо определить кто в городе статистически сдал экзамены в этом году лучше — мальчики или девочки, т.е. определить в скольких школах сдали мальчики лучше, а в скольких девочки и сравнить.

Если баллы в одной школе у мальчиков и у девочек равны, то они не учитываются. Программа должна напечатать больший процент (по правилам округления), а также кто в среднем сдал лучше мальчики(М) или девочки(Д).

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

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

5

100 50

30 49

88 79

90 90

79 48

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

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
ans1, ans2 = 0, 0  
for i in range(n):  
    a, b = map(int, input().split())  
    ans1 += 1 * (a > b)  
    ans2 += 1 * (b > a)  
if ans1 > ans2:  
    print(int(ans1/n*100 + 0.5), ’М’, sep = ’’)  
else:  
    print(int(ans2/n*100 + 0.5), ’Д’, sep = ’’)

Ответ: 45Д 54М

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

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

Имеется набор данных, состоящий из пар натуральных чисел. Каждая пара чисел представляет собой средние баллы за ЕГЭ мальчиков(1 число) и девочек(2 число) из N-ой городской школы, соответственно 100 баллов максимум. Необходимо определить, в скольких школах количество баллов у мальчиков или у девочек больше, чем 50 и при этом есть хотя бы кто-то у кого балл некратен 7.

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

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

5

100 50

30 49

88 79

90 90

79 48

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

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
ans = 0  
for i in range(n):  
    a, b = map(int, input().split())  
    if (a > 50 or b > 50) and (a % 7 !=0 or b % 7 != 0):  
        ans += 1  
print(ans)

Ответ: 15 3517

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

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

Имеется набор данных, состоящий из пар натуральных чисел. Каждая пара чисел представляет собой средние баллы за ЕГЭ мальчиков(1 число) и девочек(2 число) из N-ой городской школы, соответственно 100 баллов максимум. Необходимо выбрать из школ баллы таким образом, чтобы сумма всех полученных баллов была максимальна. Затем требуется найти результат целочисленного деления между полученной суммой и количеством школ.

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

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

5

100 50

30 49

88 79

90 90

79 48

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

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
ans = 0  
for i in range(n):  
    a, b = map(int, input().split())  
    ans += max(a, b)  
print(ans//n)

Ответ: 74 65

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

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

Имеется набор данных, состоящий из пар натуральных чисел. Каждая пара чисел представляет собой средние баллы за ЕГЭ у клонов(больше баллов) и крабов(меньше баллов), соответственно 100 баллов максимум. Необходимо определить разность по модулю между появлениями клонов в первом столбце со вторым (|счетчик появлений в первом столбце - счетчик появление во втором столбце|). Если баллы в одной строке равны, то оба клона — оба молодцы и не берем их в счет.

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

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

5

100 50

30 99

88 59

90 89

79 48

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

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
ans1 = 0  
ans2 = 0  
for i in range(n):  
    a, b = map(int, input().split())  
    if a > b:  
        ans1 += 1  
    elif b > a:  
        ans2 += 1  
print(abs(ans1-ans2))

Ответ: 2 538

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

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

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

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

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i+1, n):
        if (a[i] + a[j]) % 98 == 0:
            ans = max(ans, abs(a[i] - a[j]))
print(ans)

Ответ: 94

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

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

Дана последовательность из N  натуральных чисел. Рассматриваются все пары элементов последовательности, сумма которых четна, а произведение кратно 5  , но не делится на 10  и 3  . Требуется вычислить количество таких пар.

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

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] + a[j]) % 2 == 0 and a[i] * a[j] % 5 == 0:
            if a[i] * a[j] % 10 != 0 and a[i] * a[j] % 3 != 0:
                ans += 1
print(ans)

Ответ: 3

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

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

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

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

Решение 1 (неэффективное)

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

Ответ: 500000

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

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

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

Вложения к задаче
Показать ответ и решение
n = int(input())
a = [int(input()) for i in range(n)]
ans,summ = 1000000, 0
for i in range(n):
    for j in range(i+3, n):
        if (a[i]+a[j]) % 11 == 0:
            ans = min(ans, a[i]+a[j])
print(ans)

Ответ: 528

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("osn1.txt")
n = int(f.readline())
a = [int(i) for i in f]
ans = 0
for i in range(n):
    for j in range(i+1, n):
        if (a[i] + a[j]) % 7 == 0:
            ans += 1
print(ans)

Ответ: 57

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("osn2.txt")
n = int(f.readline())
a = [int(i) for i in f]
ans = 0
for i in range(n):
    for j in range(i+1, n):
        if (a[i] * a[j]) % 12 == 0 and (a[i] * a[j]) % 7 != 0 and (a[i] * a[j]) % 5 != 0:
            ans += 1
print(ans)

Ответ: 39

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

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

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

Вложения к задаче
Показать ответ и решение
def is_prime(num):
    for x in range(2, int(num**0.5)+1):
        if num % x == 0:
            return False
    return True
f = open("osn4.txt")
n = int(f.readline())
a = [int(i) for i in f]
ans = 0
for i in range(n):
    for j in range(i+1, n):
        if is_prime(a[i]+a[j]):
            ans += 1
print(ans)

Ответ: 56

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

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

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

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

В ответе запишите искомое количество пар.

Вложения к задаче
Показать ответ и решение
f = open(’10.txt’)
n = int(f.readline())
a = [int(i) for i in f]
cnt = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] + a[j]) % 8 == 0 and a[i] * a[j] % 5 == 0:
            cnt += 1
print(cnt)

Ответ: 156

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

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

На вход программы поступает число N  и последовательность из 4 < N ≤ 500  натуральных чисел, каждое из которых не больше 300  . Напишите программу, вычисляющую количество пар элементов последовательности, сумма которых не делится на 4  , а произведение кратно 3  , находящихся на расстоянии не меньше 2  .

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

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 2, n):
        if (a[i] + a[j]) % 4 != 0 and a[i] * a[j] % 3 == 0:
            ans += 1
print(ans)

Ответ: 48816

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

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

Найти количество чисел из отрезка [1;20], которые в паре с числом 11 образуют сумму, кратную 5.

Показать ответ и решение
print(len([i for i in range(1, 20+1) if (i+11) % 5 == 0]))

Ответ: 4

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

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

Найти количество чисел из отрезка [100; 100000], которые в паре с числом 1000 образуют положительную разность (если вычитать число из 1000), кратную 25.

Показать ответ и решение
print(len([i for i in range(100, 100000+1) \
           if (1000-i) % 25 == 0 and (1000-i) > 0]))

Ответ: 36

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

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

Найти количество чисел из отрезка [1;200], которые в паре с числом 14 образуют произведение, кратное 28.

Показать ответ и решение
print(len([i for i in range(1, 200+1) if i*14 % 28 == 0]))

Ответ: 100

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

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

Найти количество чисел из отрезка [123;12345]  , которые в паре с числом 14  образуют произведение, кратное 49  .

Показать ответ и решение
ans = 0
for i in range(123, 12346):
    if (14 * i) % 49 == 0:
        ans += 1
print(ans)

Ответ: 1746

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

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

Найти количество чиcел вида 2022⋅i+ 2023⋅j  (1 ≤ i ≤ 10000,i ≤ j ≤ 10000)  , которые кратны 2024  .

Показать ответ и решение
a = []
for i in range(1, 10001):
    for j in range(i, 10001):
        x = 2022 * i + 2023 * j
        if x % 2024 == 0:
            if not(x in a):
                a.append(x)
print(len(a))

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