[블 루 브리지 컵] 7 단 코드 python 해법
11035 단어 블 루 브리지 컵
위의 그림 은 7 단 디지털 관 의 그림 을 보 여 주 었 다. 디지털 관 에는 모두 7 단 이 빛 을 발 할 수 있 는 다이오드 가 있 는데 각각 a, b, c, d, e, f, g 로 표시 되 어 있다.파란색 은 일부 다이오드 (적어도 하나) 의 발광 을 선택 하여 문 자 를 표현 해 야 한다.문자 의 표현 을 디자인 할 때 모든 빛 나 는 다이오드 가 한 조각 으로 연결 되 어야 한다.예 를 들 어 b 발광, 다른 다이오드 가 발광 하지 않 으 면 한 문 자 를 표현 할 수 있다.예 를 들 어 c 발광, 기타 다이오드 가 발광 하지 않 으 면 한 문 자 를 표현 할 수 있다.이 방안 은 이전 줄 의 방안 과 비슷 해 보이 지만 다른 문 자 를 표시 하 는 데 사용 할 수 있다.예 를 들 어 a, b, c, d, e 발광, f, g 불 발광 은 한 문 자 를 표현 할 수 있다.예 를 들 어 b, f 가 빛 을 발 하고 다른 다이오드 가 빛 을 발 하지 않 으 면 한 가지 문 자 를 표현 할 수 없다. 빛 나 는 다이오드 가 한 조각 으로 연결 되 지 않 았 기 때문이다.블 루 는 7 단 디지털 튜브 로 몇 가지 다른 문 자 를 표현 할 수 있 습 니까?
결과: 80
import itertools
class UnionFindSet():
def __init__(self,n):
self.setSize = n #
self.father = {
i:-1 for i in range(7)}
def find(self,x):
root = x
while self.father[root] != -1: #
root = self.father[root]
while (x != root): #
o = self.father[x] # x
self.father[x] = root # x
x = o #
return root
def merge(self, x, y):
root_x = self.find(x)
root_y = self.find(y)
if root_x != root_y:
self.father[root_x] = root_y #
self.setSize -= 1
dic = {
0: [1, 5], 1: [0, 2, 6], 2: [1, 3, 6], 3: [2, 4], 4: [3, 5, 6], 5: [0, 4, 6], 6: [1, 2, 4, 5]
}
ans, nums = 7, [x for x in range(7)]
for i in range(2,8):
for j in (itertools.combinations(nums, i)):
uf = UnionFindSet(len(j))
for k in range(len(j)):
for m in range(k + 1, len(j)):
if j[m] in dic[j[k]]:
uf.merge(j[m], j[k])
if uf.setSize == 1:
ans += 1
print(ans)