На столе выложили цепочку из N костяшек по принципу домино. Под костяшкой понимается пара любых неотрицательных чисел, каждое не превышает 100. В наборе могут быть одинаковые костяшки. Переставлять местами костяшки нельзя, но можно поворачивать любое количество костяшек, получая, например, из костяшки 1-2 костяшку 2-1. Определите максимальную длину цепочки костяшек домино, которую можно получить с помощью переворачиваний. Под цепочкой понимается последовательность костяшек, в которой второе число первой костяшки равно первому числу второй. Кроме того, на костяшке может быть число 0, из него нельзя собрать пару, то есть цепочку собрать нельзя, так как два нуля не присоединимы друг к другу.
Входные данные
Дан входной файл, он содержит в первой строке количество пар
. Каждая из следующих
строк содержит два натуральных числа, не превышающих
.
В ответе укажите одно число: искомое значение для файла.
Первое решение:
n = int(f.readline())
x = [int(s) for s in f.readline().split()]
y = x.copy()
ans = 0
cur, cur_p = 1, 1
for i in range(1, n):
last, last_p = cur, cur_p
cur, cur_p = 1, 1
y = x.copy()
x = [int(s) for s in f.readline().split()]
if x[0] == y[1] and x[0] != 0:
cur = max(cur, last + 1)
if x[0] == y[0] and x[0] != 0:
cur = max(cur, last_p + 1)
if x[1] == y[1] and x[1] != 0:
cur_p = max(cur_p, last + 1)
if x[1] == y[0] and x[1] != 0:
cur_p = max(cur_p, last_p + 1)
ans = max(ans, cur, cur_p)
f.close()
print(ans)
Второе решение:
n = int(f.readline())
ans = 0
cur = [1, 1]
x = list(map(int, f.readline().split()))
y = x.copy()
for i in range(n — 1):
last = cur.copy()
cur = [1, 1]
y = x.copy()
x = list(map(int, f.readline().split()))
for k in range(2):
for j in range(2):
if x[k] == y[1 — j] and x[k] != 0:
cur[k] = max(last[j] + 1, cur[k])
ans = max(ans, cur[0], cur[1])
print(ans)