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

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

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

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

Задача 1#13937

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

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

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

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

Ответ: 926

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

Задача 2#13938

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

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

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

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

Ответ: 1326

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

Задача 3#16511

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

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

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

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

Ответ: 16739772

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

Задача 4#16546

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

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Числа записать в ответ через пробел.

Показать ответ и решение
a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
x1, x2, ans = 0, 0, 0  
for i in range(len(a)):  
    for j in range(i + 1, len(a)):  
        if (a[i] + a[j]) % 98 == 0:  
            if abs(a[i] - a[j]) > ans:  
                ans = abs(a[i] - a[j])  
                x1, x2 = a[i], a[j]  
print(x1, x2)

Ответ: 15176 22848

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

Задача 5#16547

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

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

В ответе укажите элементы пары с минимальной суммой элементов.

Вложения к задаче
Показать ответ и решение
f = open(’4.txt’)
n = int(f.readline())
a = [int(i) for i in f]
summa = 10000000
x1, x2 = -1, -1
for i in range(n-1):
    for j in range(i + 1, n):
        if abs(a[i] - a[j]) % 29 == 0:
            if (a[i] + a[j]) < summa:
                summa = a[i] + a[j]
                x1, x2 = a[i], a[j]
print(x1, x2)

Ответ: 43 14

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

Задача 6#16549

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

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
ans = 0  
for i in range(len(a)):  
    for j in range(i + 1, len(a)):  
        if a[i] % 4 == 0 and a[j] % 4 == 0:  
            ans = max(a[i] * a[j], ans)  
print(ans)

Ответ: 429907968

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

Задача 7#16551

Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, чья разница в индексах элементов должна быть 5 или более. Необходимо определить максимальную сумму такой пары, кратную 6. Если таких пар нет, ответ считается равным 0.

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
ans = 0  
for i in range(len(a)):  
    for j in range(i+5, len(a)):  
         if (a[i]+a[j]) % 6 == 0:  
             ans = max(ans, a[i]+a[j])  
print(ans)

Ответ: 37254

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

Задача 8#16553

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

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

В ответе укажите искомую разность по модулю.

Вложения к задаче
Показать ответ и решение
f = open(’5.txt’)
n = int(f.readline())
a = [int(i) for i in f]
ans = 0
for i in range(n):
    for j in range(i + 2, n):
        if (a[i] * a[j]) % 4 != 0 or (a[i] * a[j]) % 6 != 0:
            ans = max(ans, abs(a[i] - a[j]))
print(ans)

Ответ: 490

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

Задача 9#16554

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

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

В ответе укажите искомую сумму.

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

Ответ: 33

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

Задача 10#16555

Дана последовательность N целых положительных чисел, меньших 10000. Рассматриваются все пары элементов последовательности, находящихся на расстоянии не меньше 5, в которых должен быть хотя бы один ноль. Необходимо определить сумму всех индексов элементов равные нулю и использующиеся в составлении пар. Если таких пар нет, то требуется вывести 0.

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
  a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
  ans = 0  
  for i in range(len(a)):  
      for j in range(i+5, len(a)):  
          ans += i * (a[i] == 0) + j * (a[j] == 0)  
  print(ans)

Ответ: 0

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

Задача 11#16556

Дана последовательность N целых отличных друг от друга положительных чисел. Рассматриваются все пары элементов последовательности, сумма которых кратна 3 и находится в последовательности. Требуется вычислить количество таких пар. Если подходящих пар нет, нужно вывести 0.

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
  a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
  summ = []  
  ans = 0  
  for i in range(len(a)):  
      for j in range(i+1, len(a)):  
          if (a[i]+a[j]) % 3 == 0:  
              summ.append(a[i]+a[j])  
  for i in range(len(a)):  
      for j in range(len(summ)):  
          if a[i] == summ[j]:  
              ans += 1  
  print(ans)

Ответ: 0

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

Задача 12#16557

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

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
ans = 0  
for i in range(len(a)):  
    for j in range(i+1, len(a)):  
        if a[i] % 2 != 0 and a[j] % 2 != 0:  
             ans = max(ans, a[i]+a[j])  
print(ans)

Ответ: 39750

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

Задача 13#17790

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

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

В ответе укажите искомое количество.

Вложения к задаче
Показать ответ и решение
f = open(’7.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]) % 3 == 0:
            cnt += 1
print(cnt)

Ответ: 2870

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

Задача 14#17791

Дано число N  и N  целых чисел. Числа могут принимать целые значения от 0 до 100000 включительно. Напишите программу, которая находит максимальное произведение среди элементов пар чисел. Пара - любые два числа с разными номерами.

В качестве ответа запишите результат выполнения программы для N = 10  и чисел 342, 42353, 2345, 3245, 8467, 678, 738, 837, 2345, 2345.

Показать ответ и решение
N = int(input())  
array = [0] * N  
for i in range(N):  
    array[i] = int(input())  
 
answer = -1  
for i in range(N):  
    for j in range(i + 1, N):  
        if array[i] * array[j] > answer:  
            answer = array[i] * array[j]  
print(answer)

Ответ: 358602851

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

Задача 15#20714

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’9.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]) % 110 == 0:
            cnt += 1
print(cnt)

Ответ: 45

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

Задача 16#21173

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’8.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]) % 2 == 0 and (a[i] * a[j]) % 2 == 1:
            cnt += 1
print(cnt)

Ответ: 946

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

Задача 17#22663

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

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]  
ans = 1000000  
summ = 0  
for i in range(len(a)):  
    for j in range(i + 1, len(a)):  
        if (j - i) >= 3:  
            if (a[i] + a[j]) % 11 == 0:  
                ans = min(ans, a[i] + a[j])  
        if (a[i] + a[j]) % 11 == 0:  
            summ += a[i] + a[j]  
print(ans, summ)

Ответ: 19448 209451

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

Задача 18#22664

Дана последовательность N целых отличных друг от друга положительных чисел. Рассматриваются все пары элементов последовательности, сумма которых кратна 3 и находится в последовательности. Требуется вычислить количество таких пар. Если подходящих пар нет, нужно вывести 0.

Запишите ответ для массива a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603].

Показать ответ и решение
a = [3072, 4272, 5672, 7443, 9651, 12147, 15176, 18816, 22848, 27603]
summ = []
ans = 0
for i in range(len(a)):
    for j in range(i+1, len(a)):
        if (a[i]+a[j]) % 3 == 0:
            summ.append(a[i]+a[j])

for i in summ:
    if i in a:
        ans += 1
print(ans)

Ответ: 0

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

Задача 19#29984

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

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

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

7

17

15

1

5

123

1

38

Для таких входных данных значением искомое суммы будет число 200

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

Вложения к задаче
Показать ответ и решение
n = int(input())  
print(sum([int(input()) for i in range(n)]))

Ответ: 11214 24960011

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

Задача 20#29999

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

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

Первая строка входного файла содержит число N – общее количество чисел в наборе. Каждая из следующих N строк содержит натуральные числа, не превышающих 10 000.

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

5

5

10

15

91

33

Для указанных данных ответом будут являться {15}, {5, 10}, {5, 10, 15}, то есть 3.

Вложения к задаче
Показать ответ и решение
n = int(input())  
k = 15  
ans = [0]*k  
for i in range(n):  
    x = int(input())  
    ans_new = ans[:] #Аналог ans.copy()  
    for i in range(k):  
        ans_new[(i+x) % k] += ans[i]  
    ans_new[x % k] += 1  
    ans = ans_new[:]  
print(ans[0])

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