Answer the question
In order to leave comments, you need to log in
Can this code be considered a solution to this problem?
Hello! I am preparing for the exam in computer science. And I need to know if my code can be considered a solution to this problem? Also, I would like to know how effective it is. According to the input and output given in the task, my code produces the desired result. Please do not kick too much for bad code, because I am relatively new to python.
def main(n: int):
# Инициализируем переменные
m = 120 # Число m из задачи.
pair = [0, 0] # Массив для непроверенной пары.
pair2 = [0, 0] # Массив полностью проверенной пары.
indexes = [-1, n+1] # Массив индексов непроверенной пары
# Запускаем цикл.
for i in range(n):
# Читаем число.
num = int(input())
if pair[0] > num: # Делаем проверку на соответствие условию i < j.
indexes[1] = i # Назначаем новый индекс для j.
pair[1] = num # Вносим непроверенный i элемент.
if pair[1] < num: # Делаем проверку на соответствие условию i < j.
indexes[0] = i # Назначаем новый индекс для i.
pair[0] = num # Вносим непроверенный j элемент .
# Вычисляем сумму непроверенных элементов.
sums = pair[0] + pair[1]
# Выполняем проверку непроверенной пары по другим условиям задачи:
# Соответствие условию i < j; a[i] > a[j]. Также выполняется проверка на делимость a[i]+a[j] на m.
if indexes[0] < indexes[1] and pair[0] > pair[1] and sums % m == 0:
# Проверяем на максимальную сумму элементов.
if sums > pair2[0]+pair2[1]:
pair2[0] = pair[0]
pair2[1] = pair[1]
# Возвращаем массив, содержащий пару проверенных элементов.
return pair2
if __name__ == "__main__":
# Читаем кол-во чисел. (2 <= n <= 12000)
n = int(input())
# Отправляем число в функцию.
result = main(n)
# Выводим данные в соответствии с требованиями задания.
print("{} {}".format(result[0], result[1]))
m = 120
# создание массива для максимальных значений
# для каждого из остатков
r = [0] * m
# обнуление переменных для записи ответа
left = 0
right = 0
# ввод количества элементов
n = int(input())
# ввод значений, поиск искомой пары
for i in range(n):
a = int(input())
p = a % m;
if r[(m - p) % m] > a and r[(m - p) % m] + a > left + right:
#обновление ответа
left = r[(m - p) % m]
right = a;
# обновление элемента r для соответствующего остатка
if a > r[p]:
r[p] = a
print(left, right)
Answer the question
In order to leave comments, you need to log in
Yes, this is an efficient code: after all, we do not know why it is, and we cannot say otherwise.
UPDATE
from itertools import combinations
print(*max(filter(lambda p: p[0] > p[1] and not sum(p) % 120,
combinations([int(input()) for _ in range(int(input()))], 2)), key=sum))
l, best = [-1] * 120, -1
for _ in range(int(input())):
x = int(input())
y = l[-x % 120]
if x < y > best - x:
yx, best = (y, x), y + x
l[x % 120] = max(l[x % 120], x)
print(*yx)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question