Имеется набор данных из 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)