atcoder 競プロ典型90問 002 - Encyclopedia of Parentheses
2022.03.06
bit全探索
- n個それぞれに二択の選択肢をすべて探索したい
- 2**n通りのチェック
問題
pythonコード
pythonn = int(input()) items = [] for bit in range(2**n): cnt = 0 teststr = "" for i in range(n): if (bit >> i) & 1: teststr += "(" cnt += 1 else: teststr += ")" cnt -= 1 if cnt < 0: break if cnt == 0: items.append(teststr) items.sort() for i in range(len(items)): print(items[i])
キーポイント
pythonfor bit in range(2**n): cnt = 0 teststr = "" for i in range(n): if (bit >> i) & 1:
(bit >> i) & 1
で{下から(i+1)桁目が1かどうか`をチェックbit >> i
でbitをi桁分ずらしてる。& 1
が必要なのは0 or 1
にするため