08 Макс/мин, кол-во пар, сумма/разность/произведение кратно/не кратно на расстоянии
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Имеется набор данных из целых положительных чисел. Рассматриваются все пары различных элементов
последовательности. Необходимо определить количество пар элементов, которые находятся на расстоянии не менее
(за
расстояние между элементами принять разность их индексов), их сумма делится на
и при этом хотя бы один элемент
из пары больше
.
В первой строке файла находится число , в следующих
строках даны элементы последовательности, целые
положительные числа.
В ответ укажите два числа через пробел: сначала искомое значение для файла A, затем для файла B.
Переборное решение:
f = open("22_A.txt") n = int(f.readline()) a = [] for i in range(n): a.append(int(f.readline())) cnt = 0 for i in range(n): for j in range(i + 1, n): if (a[i] > 21 or a[j] > 21) and (a[i] + a[j]) % 71 == 0 and j - i >= 8: cnt += 1 print(cnt)
Эффективное решение:
f = open(’22_A.txt’) s = 8 # Расстояние между элементами k = 71 # Чему должна быть кратна сумма n = int(f.readline()) a = [int(i) for i in f] # Список с количествами чисел, удовлетворяющих определенным условием # Индексы числа nums[x][y] обозначают следующее: # x - больше ли число чем 21 (1 - да, 0 - нет) # y - остаток от деления числа на k nums = [[0] * k for _ in range(2)] cnt = 0 for i in range(s, n): # Находим остаток первого числа пары ost1 = a[i - s] % k # Увеличиваем количество чисел с такими характеристиками nums[int(a[i - s] > 21)][ost1] += 1 # Вычисляем остаток от деления на k числа-пары для x ost2 = (k - (a[i] % k)) % k # Увеличиваем ответ на количество пар с x, сумма которых будет кратна k, # где первое число точно больше 21 cnt += nums[1][ost2] # Если a[i] больше 21, то его можно поставить также в пару с числами меньше 21 if a[i] > 21: cnt += nums[0][ost2] print(cnt)
Ошибка.
Попробуйте повторить позже
На вход подается число , а затем последовательность из
натуральных чисел. Напишите программу, которая находит
количество пар элементов, произведение которых кратно
, сумма кратна
и хотя бы один элемент из пары больше
, при условии, что элементы стоят на расстоянии не меньше
, то есть
, где
— номера элементов
последовательности.
В первой строке файла находится число , в следующих
строках даны элементы последовательности, целые
положительные числа.
В ответ укажите два числа через пробел: сначала искомое значение для файла A, затем для файла B.
Переборное решение:
f = open("23_A.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] % 2 == 0 and (a[i] + a[j]) % 15 == 0: if (a[i] > 20 or a[j] > 20) and j - i >= 7: ans += 1 print(ans)
Эффективное решение:
f = open(’23_B.txt’) s = 7 # Расстояние между элементами k = 15 # Чему должна быть кратна сумма p = 2 # Чему должно быть кратно произведение n = int(f.readline()) a = [int(i) for i in f] # Список с максимальными числами, удовлетворяющими определенным условием # Индексы числа nums[x][y][z] обозначают следующее: # x - больше ли число чем 20 (1 - да, 0 - нет) # y - кратно ли число 2 (1 - да, 0 - нет) # z - остаток от деления числа на k nums = [[[0] * k for _ in range(2)] for _ in range(2)] ans = 0 for i in range(s, n): # Находим остаток первого числа пары ost1 = a[i - s] % k # Увеличиваем количество таких чисел nums[int(a[i - s] > 20)][int(a[i - s] % 2 == 0)][ost1] += 1 # Вычисляем остаток от деления на k числа-пары для x ost2 = (k - (a[i] % k)) % k ans += nums[1][1][ost2] if a[i] % 2 == 0: ans += nums[1][0][ost2] if a[i] > 30: ans += nums[0][0][ost2] if a[i] > 30: ans += nums[0][1][ost2] print(ans)
Ошибка.
Попробуйте повторить позже
На вход подается число , а затем последовательность из
натуральных чисел. Напишите программу, которая находит
количество пар элементов, произведение которых кратно
и хотя бы один элемент из пары меньше
, при
условии, что элементы стоят на расстоянии не меньше
, то есть
, где
— номера элементов
последовательности.
В первой строке файла находится число , в следующих
строках даны элементы последовательности, целые
положительные числа.
В ответ укажите два числа через пробел: сначала искомое значение для файла A, затем для файла B.
Переборное решение:
f = open("24_A.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] % 4 == 0 and (a[i] < 20 or a[j] < 20) and j - i >= 3: ans += 1 print(ans)
Эффективное решение:
f = open(’24_B.txt’) s = 3 # Расстояние между элементами p = 4 # Чему должно быть кратно произведение d = [4, 2, 1] n = int(f.readline()) a = [int(i) for i in f] # Список с количествами чисел, удовлетворяющих определенным условием # Индексы числа nums[x][y] обозначают следующее: # x - меньше ли число чем 20 (1 - да, 0 - нет) # y - максимальный делитель p, которому кратно число nums = [[0 for _ in range(p + 1)] for _ in range(2)] ans = 0 for i in range(s, n): # Получаем индекс для первого критерия ind = int(a[i - s] < 20) # Ищем максимальный делитель, которому кратно число for j in d: if a[i - s] % j == 0: # Обновляем максимальное число с такими характеристиками nums[ind][j] += 1 break # Перебираем все возможные делители и ищем те, при которых произведение будет кратно 4 for j in d: if a[i] % j == 0: # Обновляем ответ, если новая сумма больше прошлой ans += nums[1][p // j] # Если a[i] меньше 20, то его можно поставить в пару с числами больше 20 if a[i] < 20: ans += nums[0][p // j] print(ans)
Ошибка.
Попробуйте повторить позже
На вход подается число , а затем последовательность из
натуральных чисел. Напишите программу, которая находит
количество пар элементов, произведение которых кратно
, сумма кратна
и ровно один элемент пары больше
при
условии, что элементы стоят на расстоянии не меньше
, то есть
, где
- номера элементов
последовательности.
В первой строке файла находится число , в следующих
строках даны элементы последовательности, целые
положительные числа.
В ответ укажите два числа через пробел: сначала искомое значение для файла A, затем для файла B.
Переборное решение:
f = open("25_A.txt") n = int(f.readline()) a = [] for i in range(n): a.append(int(f.readline())) cnt = 0 for i in range(n): for j in range(i + 1, n): if ((a[i] > 13) != (a[j] > 13)) and (a[i] + a[j]) % 5 == 0 and (a[i] * a[j]) % 12 == 0 and j - i >= 4: cnt += 1 print(cnt)
Эффективное решение:
f = open(’25_B.txt’) s = 4 # Расстояние между элементами k = 5 # Чему должна быть кратна сумма p = 12 # Чему должно быть кратно произведение d = [12, 6, 4, 3, 2, 1] n = int(f.readline()) a = [int(i) for i in f] # Список с количествами чисел, удовлетворяющих определенным условием # Индексы числа nums[x][y][z] обозначают следующее: # x - больше ли число чем 13 (1 - да, 0 - нет) # y - максимальный делитель p, которому кратно число # z - остаток от деления числа на k nums = [[[0] * k for _ in range(p + 1)] for _ in range(2)] cnt = 0 for i in range(s, n): # Находим остаток первого числа пары ost1 = a[i - s] % k # Ищем максимальный делитель, которому кратно число for j in d: if a[i - s] % j == 0: # Увеличиваем количество чисел с такими характеристиками nums[int(a[i - s] > 13)][j][ost1] += 1 break # Вычисляем остаток от деления на k числа-пары для x ost2 = (k - (a[i] % k)) % k # Перебираем все возможные делители и ищем те, при которых произведение будет кратно 15 for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество пар с x, сумма которых будет кратна k, # Если a[i] больше 13, то его можно поставить в пару с числами меньше 13 if a[i] > 13: cnt += nums[0][p // j][ost2] # Иначе только с числами больше 13 else: cnt += nums[1][p // j][ost2] print(cnt)
Ошибка.
Попробуйте повторить позже
На вход подается число , а затем последовательность из
натуральных чисел. Напишите программу, которая
находит количество пар элементов, произведение которых не кратно сумме элементов пары, сумма элементов пары кратна
и хотя бы один элемент из пары больше
при условии, что элементы стоят на расстоянии не меньше
, то есть
, где
- номера элементов последовательности.
В первой строке файла находится число
, в следующих
строках даны элементы
последовательности, целые положительные числа, не превышающее
.
В ответе укажите одно число, значение искомого количества для файла.
f = open("27.txt") n = int(f.readline()) a = [] for i in range(n): a.append(int(f.readline())) count = 0 for i in range(n - 5): for j in range(i + 5, n): k1 = a[i] * a[j] k2 = a[i] + a[j] if k1 % k2 != 0 and k2 % 2 == 0 and (a[i] > 100 or a[j] > 100): count += 1 print(count)
Ошибка.
Попробуйте повторить позже
В файле содержится последовательность целых чисел. Элементы последовательности — неповторяющиеся натуральные
числа, принимающие значения до включительно.
Рассматриваются тройки вида , где
являются полными квадратами (элементы в тройке могут
располагаться как угодно). Элементами тройки являются различные числа, которые находятся хотя бы на расстоянии
10 друг от друга.
Найдите количество троек, подходящих под условие задачи и максимальное значение среди данных троек, в
ответе числа запишите через пробел.
Решение программой
Напишем программу, которая перебирает все возможные тройки чисел из файла, расположенных так, что расстояние между индексами каждого следующего элемента не менее 10. Для каждой тройки сортируем числа, чтобы удобнее проверить условие: первые два элемента должны быть полными квадратами, а сумма этих двух чисел должна равняться третьему элементу. Проверяем, что корень квадратный первых двух чисел — целое число, что значит они — полные квадраты. Если тройка удовлетворяет условию, увеличиваем счётчик подходящих троек и обновляем максимальное значение элемента a (суммы). По окончании перебора выводим количество таких троек и максимальное значение a.
# Открываем файл и считываем последовательность чисел в список f = open("17.txt") a = [int(i) for i in f] cnt = 0 # Счётчик подходящих троек mx = -10 ** 10 # Переменная для хранения максимального значения a # Перебираем тройки с учётом расстояния между индексами не менее 10 for i in range(len(a)): for j in range(i + 10, len(a)): for k in range(j + 10, len(a)): nums = sorted([a[i], a[j], a[k]]) # Сортируем для удобства проверки условия a = b + c # Проверяем, что первые два числа — полные квадраты if (nums[0] ** 0.5 == int(nums[0] ** 0.5)) \ and (nums[1] ** 0.5 == int(nums[1] ** 0.5)): # Проверяем равенство суммы двух первых чисел третьему if nums[0] + nums[1] == nums[2]: cnt += 1 # Увеличиваем счётчик mx = max(mx, nums[2]) # Обновляем максимум среди a # Выводим количество подходящих троек и максимальное значение a print(cnt, mx)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов.
Метеорологическая станция ведёт наблюдение за количеством выпавших осадков. Показания записываются каждую
минуту в течении минут. Определеяется пара измерений, между которыми прошло не менее
минут. Найдите
максимальную сумму показаний среди таких пар.
Входные данные:
Даны два входных файла(A и B), каждый из которых в первой строке содержит число - количество измерений, а
также через пробел число
- минимальное количество минут между искомыми измерениями. В каждой из следующих
строк находится число: количество выпавших осадков.
Пример входных данных:
Для указанных входных данных ответом будет .
В ответ укажите два числа через пробел: сначала искомое значение для файла A, затем для файла B.
Переборное решение:
f = open(’26_A.txt’) n, s = map(int, f.readline().split()) a = [int(i) for i in f] mx = -10 ** 10 for i in range(n): for j in range(i + 1, n): if j - i >= s: mx = max(mx, a[i] + a[j]) print(mx)
Эффективное решение:
f = open(’26_B.txt’) n, s = map(int, f.readline().split()) a = [int(i) for i in f] ans = -10 ** 10 s = 5 # Расстояние между элементами # Максимальное найденное на данный момент число mx_prev = -10 ** 10 for i in range(s, n): # Обновляем предыдущий максимум mx_prev = max(mx_prev, a[i - s]) # Обновляем ответ ans = max(ans, a[i] + mx_prev) print(ans)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное четное произведение двух показаний, между моментами которых прошло не менее 7 минут. Если получить такое произведение не удается, ответ считается равным — 1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
пример входного файла:
10
5
4
8
3
9
2
12
7
11
9
Для указанных входных данных значением искомого произведения должно быть число 72.
В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.
Переборное решение:
f = open(’27_A.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 for i in range(n): for j in range(i + 1, n): if (a[i] * a[j]) % 2 == 0 and j - i >= 7: ans = max(ans, a[i] * a[j]) print(ans)
Эффективное решение:
f = open(’27_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 k = 2 # Чему должна быть кратно произведение s = 7 # Расстояние между элементами # Список максимальных чисел с определенными остатками от деления на k # Например, под индексом 1 хранится максимальное число с остатком 1 nums = [-10 ** 10] * k for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Обновляем максимальное число с таким остатком nums[ost1] = max(nums[ost1], a[i - s]) # С четным числом любое число образует четное произведение ans = max(ans, a[i] * nums[0]) # Если же текущее число четное, его можно поставить в пару и с нечетными if a[i] % 2 == 0: ans = max(ans, a[i] * nums[1]) print(ans)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное нечетное произведение двух показаний, между моментами которых прошло не менее 9 минут. Если получить такое произведение не удается, ответ считается равным —1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
пример входного файла:
12
7
13
5
4
8
3
9
2
12
7
11
9
Для указанных входных данных значением искомого произведения должно быть число 143.
В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.
Переборное решение:
f = open(’28_A.txt’) n = int(f.readline()) a = [int(i) for i in f] mx = -10 ** 10 for i in range(n): for j in range(i + 1, n): if a[i] * a[j] % 2 != 0 and j - i >= 9: mx = max(mx, a[i] * a[j]) print(mx)
Эффективное решение:
f = open(’28_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 s = 9 # Расстояние между элементами # Максимальное найденное на данный момент число mx_prev = -10 ** 10 for i in range(s, n): # Только произведение двух нечетных чисел будет нечетным # поэтому работаем только с нечетными числами if a[i - s] % 2 != 0: # Обновляем максимальное встреченное число mx_prev = max(mx_prev, a[i - s]) if a[i] % 2 != 0: # Обновляем ответ ans = max(ans, a[i] * mx_prev) print(ans)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, кратное 6, между моментами которых прошло не менее 4 минут. Если получить такое произведение не удается, ответ считается равным —1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
пример входного файла:
7
5
4
8
3
9
2
12
Для указанных входных данных значением искомого произведения должно быть число 96.
В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.
Переборное решение:
f = open(’29_A.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 for i in range(n): for j in range(i + 1, n): if (a[i] * a[j]) % 6 == 0 and j - i >= 4: ans = max(ans, a[i] * a[j]) print(ans)
Эффективное решение:
Для Б
f = open(’29_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 s = 4 # Расстояние между элементами p = 6 # Чему должно быть кратно произведение d = [6, 3, 2, 1] # Делители числа p # Список максимальных чисел, делящихся на определенный делитель числа p # Например, под индексом 2 хранится максимальное число, делящееся на 2 nums = [0] * (p + 1) for i in range(s, n): # Ищем максимальный делитель, на который делится первое число пары for j in d: if a[i - s] % j == 0: # Обновляем соответствующий максимум nums[j] = max(nums[j], a[i - s]) break # Ищем делители, на которые делится второе число пары for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество образованных пар ans = max(ans, a[i] * nums[p // j]) print(ans)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, кратное 8, между моментами которых прошло не менее 6 минут. Если получить такое произведение не удается, ответ считается равным —1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
пример входного файла:
12
6
12
5
4
8
3
9
2
12
7
11
9
Для указанных входных данных значением искомого произведения должно быть число 144.
В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.
Для А
f = open(’30_A.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 for i in range(n): for j in range(i + 1, n): if (a[i] * a[j]) % 8 == 0 and j - i >= 6: ans = max(ans, a[i] * a[j]) print(ans)
Для Б
f = open(’30_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 s = 6 # Расстояние между элементами p = 8 # Чему должно быть кратно произведение d = [8, 4, 2, 1] # Делители числа p # Список максимальных чисел, делящихся на определенный делитель числа p # Например, под индексом 2 хранится максимальное число, делящееся на 2 nums = [0] * (p + 1) for i in range(s, n): # Ищем максимальный делитель, на который делится первое число пары for j in d: if a[i - s] % j == 0: # Обновляем соответствующий максимум nums[j] = max(nums[j], a[i - s]) break # Ищем делители, на которые делится второе число пары for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество образованных пар ans = max(ans, a[i] * nums[p // j]) print(ans)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, между моментами которых прошло не более 6 минут. Если получить такое произведение не удается, ответ считается равным -1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
пример входного файла:
10
7
13
5
4
8
3
9
2
12
7
Для указанных входных данных значением искомого произведения должно быть число 117.
В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.
# Для файла B заменить следующую строчку: # f = open(’10_B.txt’) f = open(’10_A.txt’) n = int(f.readline()) maxi = 0 x = [] for i in range (n): x.append(int(f.readline())) # Так как необходимо, чтобы расстояние было не больше 6, # второй цикл будет проходить 6 элементов начиная со следующего for i in range(0,len(x)-6): for j in range(i+1, i+7): if x[i]*x[j] > maxi: maxi = x[i]*x[j] print(maxi)
Ошибка.
Попробуйте повторить позже
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передает по каналу связи неотрицательное целое число — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора максимальное произведение двух показаний, кратное 15, между моментами которых прошло не более 8 минут. Если получить такое произведение не удается, ответ считается равным -1.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке
количество чисел N (). Каждая из следующих N строк содержит одно натуральное число, не
превышающее 1000.
пример входного файла:
12
5
10
7
13
5
4
8
3
9
2
12
7
Для указанных входных данных значением искомого произведения должно быть число 90.
В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.
# Для файла B заменить следующую строчку: # f = open(’10_B.txt’) f = open(’11_B.txt’) n = int(f.readline()) maxi = 0 x = [] for i in range(n): x.append(int(f.readline())) # Так как необходимо, чтобы расстояние было не больше 8, # второй цикл будет проходить 8 элементов начиная со следующего for i in range(0, len(x)-8): for j in range(i+1, i+9): if x[i]*x[j] > maxi and (x[i]*x[j])%15==0: maxi = x[i]*x[j] print(maxi)
Ошибка.
Попробуйте повторить позже
Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество
пар элементов (,
) этого набора, в которых 1
N и произведение элементов кратно
14.
Входные данные: Даны два входных файла: файл A и файл B , каждый из которых содержит в первой строке
количество чисел N (1 N
100000). Каждая из следующих N строк содержит натуральное число, не
превышающее 1000.
Пример входного файла:
7
7
5
6
12
5
14
2
Для указанных входных данных количество подходящих пар должно быть равно 3.
В ответе укажите два числа через пробел: сначала количество подходящих пар для файла А, затем для файла B.
Переборное решение:
f = open(’32_A.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]) % 14 == 0 and j - i >= 4: cnt += 1
Эффективное решение:
f = open(’32_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 s = 4 # Расстояние между элементами p = 14 # Чему должно быть кратно произведение d = [14, 7, 2, 1] # Делители числа p # Список количеств чисел, делящихся на определенный делитель числа p # Например, под индексом 2 хранится кол-во чисел, делящихся на 2 nums = [0] * (p + 1) for i in range(s, n): # Ищем максимальный делитель, на который делится первое число пары for j in d: if a[i - s] % j == 0: # Увеличиваем кол-во чисел делящихся на j nums[j] += 1 break # Ищем делители, на которые делится второе число пары for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество образованных пар ans += nums[p // j] print(ans)
Ошибка.
Попробуйте повторить позже
Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество
пар элементов (,
) этого набора, в которых 1
N и произведение элементов кратно
9.
Входные данные: Даны два входных файла: файл A и файл B , каждый из которых содержит в первой строке
количество чисел N (1 N
100000). Каждая из следующих N строк содержит натуральное число, не
превышающее 1000.
Пример входного файла:
13
7
5
6
12
5
14
2
6
12
8
9
3
5
Для указанных входных данных количество подходящих пар должно быть равно 5.
В ответе укажите два числа через пробел: сначала количество подходящих пар для файла А, затем для файла B.
Переборное решение:
f = open(’33_A.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]) % 9 == 0 and j - i >= 8: cnt += 1 print(cnt)
Эффективное решение:
Для Б
f = open(’33_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 s = 8 # Расстояние между элементами p = 9 # Чему должно быть кратно произведение d = [9, 3, 1] # Делители числа p # Список количеств чисел, делящихся на определенный делитель числа p # Например, под индексом 2 хранится кол-во чисел, делящихся на 2 nums = [0] * (p + 1) for i in range(s, n): # Ищем максимальный делитель, на который делится первое число пары for j in d: if a[i - s] % j == 0: # Увеличиваем кол-во чисел делящихся на j nums[j] += 1 break # Ищем делители, на которые делится второе число пары for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество образованных пар ans += nums[p // j] print(ans)
Ошибка.
Попробуйте повторить позже
Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество
пар элементов (,
) этого набора, в которых 1
N и произведение элементов кратно
12.
Входные данные: Даны два входных файла: файл A и файл B , каждый из которых содержит в первой строке
количество чисел N (1 N
100000). Каждая из следующих N строк содержит натуральное число, не
превышающее 1000.
Пример входного файла:
15
10
8
7
5
6
12
5
14
2
6
12
8
9
3
5
Для указанных входных данных количество подходящих пар должно быть равно 1.
В ответе укажите два числа через пробел: сначала количество подходящих пар для файла А, затем для файла B.
Для А
f = open(’14_A.txt’) n = int(f.readline()) cnt = 0 x = [] for i in range (n): x.append(int(f.readline())) for i in range(0, len(x)-13): for j in range(i+13, len(x)): if (x[i]*x[j])%12==0: cnt += 1 print(cnt)
Для Б
f = open(’34_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 s = 13 # Расстояние между элементами p = 12 # Чему должно быть кратно произведение d = [12, 6, 4, 3, 2, 1] # Делители числа p # Список количеств чисел, делящихся на определенный делитель числа p # Например, под индексом 2 хранится кол-во чисел, делящихся на 2 nums = [0] * (p + 1) for i in range(s, n): # Ищем максимальный делитель, на который делится первое число пары for j in d: if a[i - s] % j == 0: # Увеличиваем кол-во чисел делящихся на j nums[j] += 1 break # Ищем делители, на которые делится второе число пары for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество образованных пар ans += nums[p // j] print(ans)
Ошибка.
Попробуйте повторить позже
Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар
элементов (,
) этого набора, в которых 1
i+6 < j
N и произведение элементов кратно
18.
Входные данные: Даны два входных файла: файл A и файл B , каждый из которых содержит в первой строке
количество чисел N (1 N
100000). Каждая из следующих N строк содержит натуральное число, не
превышающее 10000.
Пример входного файла:
13
7
5
6
12
5
14
2
6
12
8
9
3
5
Для указанных входных данных количество подходящих пар должно быть равно 4.
В ответе укажите два числа через пробел: сначала количество подходящих пар для файла А, затем для файла B.
Переборное решение:
f = open(’9_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+7,len(a)): if (a[i]*a[j]) % 18 == 0: counter += 1 print(counter)
Эффективное решение:
f = open(’35_B.txt’) n = int(f.readline()) a = [int(i) for i in f] ans = 0 s = 6 # Расстояние между элементами p = 18 # Чему должно быть кратно произведение d = [18, 9, 6, 3, 2, 1] # Делители числа p # Список количеств чисел, делящихся на определенный делитель числа p # Например, под индексом 2 хранится кол-во чисел, делящихся на 2 nums = [0] * (p + 1) for i in range(s, n): # Ищем максимальный делитель, на который делится первое число пары for j in d: if a[i - s] % j == 0: # Увеличиваем кол-во чисел делящихся на j nums[j] += 1 break # Ищем делители, на которые делится второе число пары for j in d: if a[i] % j == 0: # Увеличиваем ответ на количество образованных пар ans += nums[p // j] print(ans)
Ошибка.
Попробуйте повторить позже
По каналу связи передается последовательность целых неотрицательных чисел – показания прибора, полученные с
интервалом в 1 мин в течение минут (
– целое число). Прибор измеряет количество атмосферных осадков,
полученное регистратором за минуту, предшествующую моменту регистрации, и передает это значение в условных
единицах измерения.
Определите два таких переданных числа, чтобы между моментами их передачи прошло не менее мин, а их
сумма была максимально возможной. Укажите найденное суммарное количество осадков.
Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит натуральное число
– минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй –
количество переданных показаний
. В каждой из следующих
строк находится
одно целое неотрицательное число, не превышающее 100.000, обозначающее количество осадков за соответствующую
минуту.
Переборное решение:
f = open(’A.txt’) s = int(f.readline()) # Расстояние между элементами n = int(f.readline()) a = [int(i) for i in f] mx = -10 ** 10 for i in range(n): for j in range(i + 1, n): if j - i >= s: mx = max(mx, a[i] + a[j]) print(mx)
Эффективное решение:
f = open(’B.txt’) s = int(f.readline()) # Расстояние между элементами n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 # Максимальное найденное на данный момент число mx_prev = -10 ** 10 for i in range(s, n): # Обновляем максимальное число mx_prev = max(mx_prev, a[i - s]) # Обновляем ответ ans = max(ans, a[i] + mx_prev) print(ans)
Ошибка.
Попробуйте повторить позже
По каналу связи передается последовательность целых неотрицательных чисел – показания прибора, полученные с
интервалом в 1 мин в течение минут (
– целое число). Прибор измеряет количество атмосферных осадков,
полученное регистратором за минуту, предшествующую моменту регистрации, и передает это значение в условных
единицах измерения.
Определите два таких переданных числа, чтобы между моментами их передачи прошло не менее мин, а их
сумма была максимально возможной и при этом не кратной 9. Укажите найденное суммарное количество
осадков.
Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит натуральное число
– минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй –
количество переданных показаний
. В каждой из следующих
строк находится
одно целое неотрицательное число, не превышающее 100.000, обозначающее количество осадков за соответствующую
минуту.
Эффективное решение:
f = open(’B.txt’) s = int(f.readline()) # Расстояние между элементами n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 k = 9 # Чему не должна быть кратна сумма # Список максимальных чисел с определенными остатками от деления на k # Например, под индексом 2 хранится максимальное число с остатком 2 nums = [-10 ** 10] * k for i in range(s, n): # Считаем остаток от деления первого числа пары на k ost1 = a[i - s] % k # Обновляем максимум по остатку nums[ost1] = max(nums[ost1], a[i - s]) # Считаем остаток, который должен быть у числа, # которое нельзя поставить в пару с текущим ost2 = (k - (a[i] % k)) % k for j in range(k): # Если сумма не будет кратна k if j != ost2: # Обновляем ответ, если он больше предыдущего ans = max(ans, a[i] + nums[j]) print(ans)
Ошибка.
Попробуйте повторить позже
По каналу связи передается последовательность целых чисел – показания прибора. В течение минут (
–
натуральное число) прибор ежеминутно регистрирует значение напряжения (в условных единицах) в электрическойй
сети и передает его на сервер.
Определите три таких переданных числа, чтобы между моментами передачи любых двух из них прошло не
менее мин, а сумма этих трех чисел была максимально возможной. Запишите в ответе найденную
сумму.
Входные данные:
Даны два входных файла (файл А и файл В), каждый из которых в первой строке содержит натуральное число
– минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй –
количество переданных показаний
. В каждой из следующих
строк находится
одно целое число, по модулю не превышающее 10.000.000, которое обозначает значение напряжения в соответствующую
минуту.
Запишите в ответе два числа: сначала значение искомой величины для файла А, затем – для файла В.
Переборное решение:
f = open(’A.txt’) s = int(f.readline()) # Расстояние между элементами n = int(f.readline()) a = [int(i) for i in f] mx = -10 ** 10 for i in range(n): for j in range(i + 1, n): for k in range(j + 1, n): if j - i >= s and k - j >= s: mx = max(mx, a[i] + a[j] + a[k]) print(mx)
Эффективное решение:
f = open(’B.txt’) s = int(f.readline()) # Расстояние между элементами n = int(f.readline()) a = [int(i) for i in f] ans = -10 ** 10 # Максимальное найденное на данный момент число mx_one = mx_two = -10 ** 10 for i in range(2 * s, n): # Обновляем первое максимальное число mx_one = max(mx_one, a[i - 2 * s]) # Обновляем второе максимальное число mx_two = max(mx_two, a[i - s]) # Обновляем ответ ans = max(ans, a[i] + mx_one + mx_two) print(ans)