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 | def subsets(n, k): assert k >= 0 and n >= 0 if k == 0: # no students, all seats are empty yield '0'*n elif k == 1 and (n == 1 or n == 2): # the last student at the end of the row yield '1' + '0'*(n-1) # either '1' or '10' if n == 2: yield '01' elif n > 3*(k-1): # there are enough empty seats left for k students for s in subsets(n-3, k-1): yield '100' + s # place a student for s in subsets(n-1, k): yield '0' + s # add empty seat def isvalid(a, n, k): if not isinstance(a, basestring): a = ''.join(a) # `a` is a list of '1', '0' return (len(a) == n and a.count('1') == k and a.count('0') == (n-k) and all(p not in a for p in ['11', '101'])) n, k = 5, 2 for s in subsets(n, k): assert isvalid(s, n, k), s print(s) |
ZGVmIHN1YnNldHMobiwgayk6CiAgICBhc3NlcnQgayA+PSAwIGFuZCBuID49IDAKICAgIGlmIGsgPT0gMDogIyBubyBzdHVkZW50cywgYWxsIHNlYXRzIGFyZSBlbXB0eQogICAgICAgIHlpZWxkICcwJypuCiAgICBlbGlmIGsgPT0gMSBhbmQgKG4gPT0gMSBvciBuID09IDIpOiAjIHRoZSBsYXN0IHN0dWRlbnQgYXQgdGhlIGVuZCBvZiB0aGUgcm93CiAgICAgICAgeWllbGQgJzEnICsgJzAnKihuLTEpICMgZWl0aGVyICcxJyBvciAnMTAnCiAgICAgICAgaWYgbiA9PSAyOiB5aWVsZCAnMDEnCiAgICBlbGlmIG4gPiAzKihrLTEpOiAjIHRoZXJlIGFyZSBlbm91Z2ggZW1wdHkgc2VhdHMgbGVmdCBmb3IgayBzdHVkZW50cwogICAgICAgIGZvciBzIGluIHN1YnNldHMobi0zLCBrLTEpOgogICAgICAgICAgICB5aWVsZCAnMTAwJyArIHMgIyBwbGFjZSBhIHN0dWRlbnQKICAgICAgICBmb3IgcyBpbiBzdWJzZXRzKG4tMSwgayk6CiAgICAgICAgICAgIHlpZWxkICcwJyArIHMgICAjIGFkZCBlbXB0eSBzZWF0CgpkZWYgaXN2YWxpZChhLCBuLCBrKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKGEsIGJhc2VzdHJpbmcpOgogICAgICAgYSA9ICcnLmpvaW4oYSkgIyBgYWAgaXMgYSBsaXN0IG9mICcxJywgJzAnCiAgICByZXR1cm4gKGxlbihhKSA9PSBuIGFuZCBhLmNvdW50KCcxJykgPT0gayBhbmQgYS5jb3VudCgnMCcpID09IChuLWspIGFuZAogICAgICAgICAgICBhbGwocCBub3QgaW4gYSBmb3IgcCBpbiBbJzExJywgJzEwMSddKSkKCgpuLCBrID0gNSwgMgpmb3IgcyBpbiBzdWJzZXRzKG4sIGspOgogICAgYXNzZXJ0IGlzdmFsaWQocywgbiwgayksIHMKICAgIHByaW50KHMpCg==
-
upload with new input
-
result: Success time: 0.02s memory: 6356 kB returned value: 0
10010 10001 01001


