Задача из Яндекс Контест Python
Профессор математики Ерёменко разработал теорию, согласно которой реальных цивилизаций гораздо меньше, чем считают историки. В его теории есть основная цивилизация A про которую известна последовательнось из N исторических событий. Каждое событие обозначается числами от 1 до N, каждое число встречается ровно один раз. В i-й год в цивилизации происходило событие Ai Кроме цивилизации A существовали также две ”ложные” цивилизации B и C, для них профессор Ерёменко также выписал случившиеся с ними исторические события, происходившие синхронно с событиями в цивилизации A. В i-й год в цивилизации B происходило событие Bi, а в цивилизации C — событие Ci. Эти события также обозначены числами от 1 до N (однако для этих цивилизаций числа могут повторяться).
В теории профессора Ерёменко порядок событий не важен, главное чтобы у всёх трех цивилизаций A, B и C множества событий совпадали. Помогите профессору Ерёменко вычеркнуть информацию за некоторые годы (т.е. удалить из последовательностей элементы Ai, Bi, Ci для некоторых i) так, чтобы множества событий стали совпадать. Чтобы сенсационность открытия профессора была выше, необходимо минимизировать количество вычеркнутых годов.
Формат ввода: первая строка - N (1≤N≤100000) — количество событий для каждой из цивилизаций. В следующих трёх строках задаются описания исторических событий.
Формат вывода: Выведите одно число — минимальное количество лет, информацию о которых необходимо вычеркнуть.
Пример 1 Ввод:
N = 7
A = {7 6 1 2 3 4 5},
B = {7 4 3 1 1 5 5},
C = {2 6 5 4 1 7 3}
Вывод: 4
Пример 2 Ввод:
N = 9
A = {7 4 2 6 8 9 5 3 1},
B = {7 4 3 9 4 6 5 1 2},
C = {7 8 2 6 8 9 1 5 3}
Вывод: 2
Два тесто прошло, остальное пишет неверный код
links = []
with open("input.txt", encoding="UTF-8") as file_in:
for line in file_in:
links.append(line.rstrip("\n"))
N = int(links[0])
r = links[1:len(links)]
A, B, C = map(str, [''.join(i.split(' ')) for i in r])
def func(N, A, B, C):
set_A, set_B, set_C = set(A), set(B), set(C)
common_events = set_A & set_B & set_C
filtered_A = []
filtered_B = []
filtered_C = []
for i in range(N):
if A[i] in common_events and B[i] in common_events and C[i] in common_events:
filtered_A.append(A[i])
filtered_B.append(B[i])
filtered_C.append(C[i])
itogo = set(filtered_A) & set(filtered_B) & set(filtered_C)
item_itogo = N - len(itogo)
return item_itogo
min_chislo = str(func(N, A, B, C))
with open("output.txt", "w", encoding="UTF-8") as file_out:
file_out.write(min_chislo)
В чём может быть проблема подскажите пожалуйста, голова совсем не соображается почему неверно
Ответы (1 шт):
item_itogo = N - len(itogo)
Это неправильно. Нельзя использовать N
для вычисления ответа, поскольку мы не знаем, сколько различных лет было изначально.
{1,1,2,2}, {1,1,2,2}, {1,1,2,2} => 0
{1,1,1,1}, {2,2,2,2}, {3,3,3,3} => 3
{1,1,1,1}, {2,2,2,2}, {1,1,2,2} => 2
Насколько я понимаю, правильное решение такое:
len(set(a) | set(b) | set(c)) - len(set(a) & set(b) & set(c))