Тема 27. Программирование

27.07 Макс/мин, кол-во пар, смешаное кратно/не кратно

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

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

Задача 1#30009

Имеется набор данных из N натуральных чисел. Требуется найти наибольшую сумму пары, конкатенация которых будет являться палиндромом. Если такой суммы нет — напечатайте 0.

В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 9999). В каждой из последующих N строк записано одно целое положительное число, строго меньшее 10 000.

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

5

3

5

5

3

10

Выходные данные для приведённого выше примера: 10

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

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

Переборное решение:

f = open(’4_A.txt’)

n = int(f.readline())
x = [int(i) for i in f]
mx = 0

for i in range(n):
    for j in range(i + 1, n):
        s1 = str(x[i]) + str(x[j])
        s2 = str(x[j]) + str(x[i])
        if s1 == s1[::-1] or s2 == s2[::-1]:
            mx = max(mx, s1 + s2)

print(mx)

Эффективное решение:

pali = []
for i in range(6):
    pali.append([str(i) for i in range(10**i, 10**(i+1)+1) if str(i) == str(i)[::-1]])
n = int(input())
mask = [0]*10000
for i in range(n):
    mask[int(input())] += 1
ans = 0
for k in range(10000):
    if mask[k] >= 1:
        s = str(k)
        for i in range(len(s)):
            s1 = s[i:len(s)][::-1]
            if s != s1:
                if mask[int(s1)] >= 1:
                    if s + s1 == (s + s1)[::-1]:
                        if int(s) + int(s1) > ans:
                            ans = int(s)+int(s1)
            else:
                if mask[int(s1)] >= 2:
                    if s + s1 == (s + s1)[::-1]:
                        ans = int(s)+int(s1)

        s1 = s[::-1]
        s2 = ’’
        for i in range(8-len(s + s1)):
            for j in range(len(pali[i])):
                s2 = pali[i][j] + s1
                if len(s2) > 4:
                    break
                if mask[int(s2)] >= 1:
                    if s + s2 == (s + s2)[::-1]:
                                                                                                     
                                                                                                     
                        if int(s)+int(s2) > ans:
                            ans = int(s)+int(s2)
print(ans)

Ответ: 0 15774

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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