atcoder#ABC146F. [ABC146F] Sugoroku
[ABC146F] Sugoroku
题目描述
高橋君は双六で遊んでいます。
この双六には から までの番号がついた 個のマスがあります。高橋君はマス からスタートし、ゴールするにはマス にちょうど止まらなければなりません。
この双六では、 から までの 種類の目が出るルーレットを使います。各手番で、高橋君はルーレットを回して出た目の数だけ進みます。この結果マス を越えて進むことになる場合、ゲームオーバーとなります。
また、いくつかのマスは「ゲームオーバーマス」であり、それらのマスに止まってもゲームオーバーとなります。マスの情報は長さ の文字列 で与えられます。各 について、 のときマス はゲームオーバーマスであり、 のときマス はゲームオーバーマスではありません。
高橋君がゲームオーバーとならずに最短手数でゴールするときの出目を順に答えてください。そのような目の出方が複数存在するときは、そのうち出目の列が辞書順で最小であるものを出力してください。ゲームオーバーとならずにゴールすることが不可能である場合は、 を出力してください。
输入格式
入力は以下の形式で標準入力から与えられる。
输出格式
ゴールすることが可能である場合、そのような最短の出目の列のうち辞書順で最小のものを出力せよ。ゴールすることが不可能である場合、 を出力せよ。
题目大意
ABC146F 双六
【题目描述】
高桥君在玩双六棋,棋盘格由用到编号的共个格子构成。每一回合,高桥君会扔一个点数到的骰子。如果高桥君当前在第格,骰子扔出点,高桥君就前进到第格。 如果此时,高桥君立刻输掉。另外,棋盘上还有若干个“GameOver格”,如果高桥停在这些格子,也立刻输掉游戏。
假设高桥君可以自由控制骰子的点数,那么他从号格子出发,到达号格子,最短需要多少回合?输出用最短回合到达格时,每回合骰子的点数组成的序列;如果无法到达号格子,输出-1。
【输入格式】
第1行,两个正整数
第2行,一个长为的字符串。表示第格是一个普通格子;表示第格是一个GameOver格。
【输出格式】
输出用最短回合到达格时,每回合骰子的点数组成的序列,若有多种序列回合数都是最短,输出其中字典序最小的。
如果无法到达号格子,输出-1。
【输入样例#1】
9 3
0001000100
【输出样例#1】
1 3 2 3
【样例#1说明】
按的顺序扔出骰子的点数,高桥君会经过第格最终到达第格。
无法在次以内到达第格。是所有次到达第格的点数序列中,字典序最小的。
【数据说明】
长度为,只由字符'0'和'1'组成,保证,。
9 3
0001000100
1 3 2 3
5 4
011110
-1
6 6
0101010
6
提示
制約
- は
0
と1
から成る -
0
-
0
Sample Explanation 1
, , , の順に目を出すと、高橋君はマス , , を経由してマス に到達することが出来ます。高橋君が 手以内にマス に到達することは不可能であり、また 手でマス に到達するような出目の列の中ではこれが辞書順で最小です。
Sample Explanation 2
高橋君はマス に到達することが出来ません。