白俊8111号0と1.


from collections import deque
t = int(input())

def bfs(n):
    u = 10 % n
    q = deque()
    q.append((1, 1))
    while q:
        x, mod = q.popleft()
        if x >= 10 ** 101:
            print('BRAK')
            return
        for y in [10 * x + 1, 10 * x]:
            if y % n == 0:
                print(y)
                return
            if y == 10 * x + 1:
                q.append((y, (mod * u + 1) % n))
            if y == 10 * x:
                q.append((y, (mod * u ) % n)) 
    
for _ in range(t):
    n = int(input())
    bfs(n) 
最初はこのようにbfsを簡単に実現した.もちろん、メモリオーバーフローや999などの大きな数も計算されていません.配列の代わりにsetを使いますがわかりませんたぶん残りに近づいたが、実現しなかった.
from collections import deque

def bfs(n):
    check = [-1] * n
    how = [-1] * n
    afrom = [-1] * n
    
    q = deque()
    q.append(1 % n)
    check[1 % n] = 0
    how[1 % n] = 1
    while q:
        x = q.popleft()
        for y in [10 * x, (10 * x) + 1]:
            if check[y % n] == -1:
                if y == 10 * x:
                    how[y % n] = 0
                else:
                    how[y % n] = 1
                afrom[y % n] = x
                q.append(y % n)
                check[y % n] = check[x] + 1
                
    ans = []
    if check[0] == -1:
        print('BRAK')
    else:
        i = 0
        while i != -1:
            ans.append(how[i])
            i = afrom[i]
    print(*ans[::-1], sep = '')
    
t = int(input())

for _ in range(t):
    n = int(input())
    bfs(n)  
  • check,how,afrom配列はなぜn+1のサイズですか.残りの計算を行うので,探索はどうせ残り(0~n-1)で終わる.nを過ぎるとどうせ最小ではなく、その前にnの倍数が出てきました.
  • check[0]=-1の場合、nの倍数は見つからない(残りは0)
  • i=-1でナビゲーションが終了します.afromレイアウトは駅に行って探したもので、駅に印刷する必要があります.
  • check:長さ
    方法:1または0
    afrom[i]:0または1以前の残存値
  • 他を思い出したら追加…