Код: Выделить всё
mustConstraint = set()
notConstraint = set()
violated = 0
satisfied = 0
for i in range(0, int(input(''))):
constraint = input('')
mustConstraint.add(frozenset(constraint.split()))
for i in range(0, int(input(''))):
constraint = input('')
notConstraint.add(frozenset(constraint.split()))
for i in range(0, int(input(''))):
group = input('')
group = set(group.split())
for x in mustConstraint:
if x & group == x:
satisfied +=1
for y in notConstraint:
if y & group == y:
violated += 1
violated += len(mustConstraint) - satisfied
print(violated)
Выведите целое число от 0 до X+Y, которое представляет собой количество нарушенных ограничений.
Я настоятельно рекомендую вам посетить проблемный сайт здесь, поскольку проблему гораздо легче понять с помощью предоставленных примеров случаев и их объяснений.
К сожалению, поскольку последний пакет содержит ~ 300 000 входных данных. , мои вложенные циклы for работают слишком медленно и не укладываются в лимит времени в 4 секунды. Может ли кто-нибудь помочь мне оптимизировать мой код?
[img]https:/ /i.sstatic.net/1aGVpz3L.png[/img]
Большая часть задержки происходит из-за этого блока:
Код: Выделить всё
for i in range(0, int(input(''))):
group = input('')
group = set(group.split())
for x in mustConstraint:
if x & group == x:
satisfied +=1
for y in notConstraint:
if y & group == y:
violated += 1
если бы кто-то мог найти способ сократить количество итераций, это имело бы существенное значение.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -4-seconds