-
Notifications
You must be signed in to change notification settings - Fork 0
/
2F. Symmetric sequence.py
85 lines (68 loc) · 2.24 KB
/
2F. Symmetric sequence.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"""
Последовательность чисел назовем симметричной, если она одинаково читается как слева
направо, так и справа налево. Например, следующие последовательности являются симметричными:
1 2 3 4 5 4 3 2 1
1 2 1 2 2 1 2 1
Вашей программе будет дана последовательность чисел. Требуется определить, какое
минимальное количество и каких чисел надо приписать в конец этой последовательности,
чтобы она стала симметричной.
Формат ввода
Сначала вводится число N — количество элементов исходной последовательности (1 ≤
N ≤ 100). Далее идут N чисел — элементы этой последовательности, натуральные числа
от 1 до 9.
Формат вывода
Выведите сначала число M — минимальное количество элементов, которое надо дописать
к последовательности, а потом M чисел (каждое — от 1 до 9) — числа, которые надо
дописать к последовательности.
Пример 1
Ввод
Вывод
9
1 2 3 4 5 4 3 2 1
0
Пример 2
Ввод
Вывод
5
1 2 1 2 2
3
1 2 1
Пример 3
Ввод
Вывод
5
1 2 3 4 5
4
4 3 2 1
"""
def fun(s):
"""
>>> fun([1, 2, 3, 4, 5, 4, 3, 2, 1])
0
>>> fun([1, 2, 1, 2, 2])
(3, [1, 2, 1])
>>> fun([1, 2, 3, 4, 5])
(4, [4, 3, 2, 1])
"""
new_s = s
k = 0
while True:
if new_s == new_s[::-1]:
break
else:
k += 1
new_s = s + s[k - 1 :: -1] # s[:k][::-1]
if k == 0:
return k
else:
return k, s[k - 1 :: -1] # s[:k][::-1]
_, s = int(input()), list(map(int, input().split()))
ans = fun(s)
if type(ans) is int:
print(ans)
else:
print(ans[0])
print(*ans[1])
if __name__ == "__main__":
import doctest
doctest.testmod()