Permutasyon/kombinasyondan pek anlamam, ama:
Teorik minimum tam sayi degil. (5, 3, 2) parametrelerini aldigimizda her 3’lu grup soylenen 10 ciftten (C(5, 2)) 3’unu karsilayabiliyor (C(3, 2)). Bolumleri 3.3̅, cevap 4. ((1,2,3), (1,4,5), (2,3,4), (2,3,5))
Formul varsa ⌈C(N, q) / C(k, q)⌉ oldugundan supheleniyorum; taban veya toplama islemi kullanmayan, ozyinelemeli veya parcali olmayan fonksiyonlara da guvenmiyorum.
Oynama koduna da basladim da bugunluk foruma ayirdigim vaktin sonuna geldigim icin havada birakiyorum:
import itertools
def solve(N, g, ask):
Nset = list(range(1, N + 1))
queries = list(itertools.combinations(Nset, ask))
all_sets = list(itertools.combinations(Nset, g))
satisfy = lambda query, sets: any([all([(qe in s) for qe in query]) for s in sets])
assert satisfy([1], [[1], [2]]) == True
assert satisfy([2], [[1], [2]]) == True
assert satisfy([3], [[1], [2]]) == False
assert satisfy([1], [[1, 2], [2, 3]]) == True
assert satisfy([2], [[1, 2], [2, 3]]) == True
assert satisfy([3], [[1, 2], [2, 3]]) == True
assert satisfy([1, 2], [[1, 2], [2, 3]]) == True
assert satisfy([2, 3], [[1, 2], [2, 3]]) == True
assert satisfy([1, 3], [[1, 2], [2, 3]]) == False
assert satisfy([1, 2, 3], [[1, 2], [2, 3]]) == False
satisfy_all = lambda queries, sets: all([satisfy(q, sets) for q in queries])
assert satisfy_all([[1], [2], [3]], [[1], [2]]) == False
assert satisfy_all([[1], [2], [3]], [[1, 2], [3]]) == True
assert satisfy_all([[1, 2], [2, 3]], [[4, 1, 2], [4, 2, 3]]) == True
assert satisfy_all([[1, 2], [2, 3], [1, 3]], [[1, 2, 3]]) == True
assert satisfy_all([[1, 2], [2, 3], [1, 3]], [[1, 2], [2, 3]]) == False