第一行输入N,第二行输入N个数字,只包含0,1,2
输出字符串要移几位才能解开密码,如果无论移位多少次都解不开密码,输出-1
5 02120 5 02120
1 1
这道题跟玛雅人那道题一样,但测试用例似乎有点问题。
def BFS(Q,k,n,trash):
m = len(Q)
for j in range(m):
q = Q.pop(0)
trash.append(q)
for i in range(n-1):
if '2012' in q[:i]+q[i+1]+q[i]+q[i+2:]:
return k+1
else:
if q[:i]+q[i+1]+q[i]+q[i+2:] not in Q+trash:
Q.append(q[:i]+q[i+1]+q[i]+q[i+2:])
return BFS(Q,k+1,n,trash)
while True:
try:
n = int(input())
s = input()
trash = []
char_cnt = {'0':0,'1':0,'2':0}
for i in range(n):
char_cnt[s[i]] += 1
if char_cnt['0']<1 or char_cnt['1']<1 or char_cnt['2']<1:
print(-1)
elif '2012' in s:
print(0)
else:
print(BFS([s],0,n,trash))
except:
break