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

.06 Макс/мин, кол-во пар, произведение кратно/не кратно

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

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

Задача 1#74968

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

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

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

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

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

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

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

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

#Переборный алгоритм
f = open(’1_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]) % 2 == 0: # проверка по условию
            maxi = max(maxi, a[i]*a[j]) # обновление максимального произведения
print(maxi) # вывод ответа

#Статическое решение
file = open(’1B__2rcsr.txt’) #открытие файла
n = int(file.readline()) #считывание первого числа - количество чисел в файле
div = 2 # наш делитель
#четное произведение можно получить помножив два чётных числа или одно чётное числа на нечётное
mx_0 = [0,0] #список, в котором будут храниться два максимальных чётных числа, где mx_0[0] - максимальное чётное, а mx_0[1] - предмаксимальное
mx_1 = 0 # максимальное нечётное число
mx_prod = 0 # максимальное произведение пары
for i in range(n): # проход по файлу
    x = int(file.readline()) # cчитываем текущее число
    if x % 2 == 0: # если текущее число - чётное
        if x > mx_0[0]: # если текущее число больше максимального
            mx_0[1] = mx_0[0] #в ячейку предмаксимального записываем максимальное
            mx_0[0] = x #вместо максимального записываем текущее число
        elif x > mx_0[1]: # если текущее число больше только предмаксимального
            mx_0[1] = x #вместо предмаксимального записываем текущее число
    else: # если текущее число - нечётное
        mx_1 = max(mx_1,x) #обновляем максимальное нечётное число
mx_prod = max(mx_1*mx_0[0],mx_0[0]*mx_0[1]) #записываем максимальное произведение из произведений двух чётных чисел или одного чётного и одного нечётного
print(mx_prod) # вывод ответа

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

Ответ: 886788 997002

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

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