atcoder#ABC146F. [ABC146F] Sugoroku

[ABC146F] Sugoroku

题目描述

高橋君は双六で遊んでいます。

この双六には 0 0 から N N までの番号がついた N + 1 N\ +\ 1 個のマスがあります。高橋君はマス 0 0 からスタートし、ゴールするにはマス N N にちょうど止まらなければなりません。

この双六では、1 1 から M M までの M M 種類の目が出るルーレットを使います。各手番で、高橋君はルーレットを回して出た目の数だけ進みます。この結果マス N N を越えて進むことになる場合、ゲームオーバーとなります。

また、いくつかのマスは「ゲームオーバーマス」であり、それらのマスに止まってもゲームオーバーとなります。マスの情報は長さ N + 1 N\ +\ 1 の文字列 S S で与えられます。各 i i (0  i  N) (0\ \leq\ i\ \leq\ N) について、S[i] = 1 S[i]\ =\ 1 のときマス i i はゲームオーバーマスであり、S[i] = 0 S[i]\ =\ 0 のときマス i i はゲームオーバーマスではありません。

高橋君がゲームオーバーとならずに最短手数でゴールするときの出目を順に答えてください。そのような目の出方が複数存在するときは、そのうち出目の列が辞書順で最小であるものを出力してください。ゲームオーバーとならずにゴールすることが不可能である場合は、 1 -1 を出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N M M S S

输出格式

ゴールすることが可能である場合、そのような最短の出目の列のうち辞書順で最小のものを出力せよ。ゴールすることが不可能である場合、1 -1 を出力せよ。

题目大意

ABC146F 双六

【题目描述】

高桥君在玩双六棋,棋盘格由用00NN编号的共N+1N+1个格子构成。每一回合,高桥君会扔一个点数11MM的骰子。如果高桥君当前在第ii格,骰子扔出kk点,高桥君就前进到第i+ki+k格。 如果此时i+k>Ni+k > N,高桥君立刻输掉。另外,棋盘上还有若干个“GameOver格”,如果高桥停在这些格子,也立刻输掉游戏。

假设高桥君可以自由控制骰子的点数,那么他从00号格子出发,到达NN号格子,最短需要多少回合?输出用最短回合到达NN格时,每回合骰子的点数组成的序列;如果无法到达NN号格子,输出-1。

【输入格式】

第1行,两个正整数N,MN,M

第2行,一个长为N+1N+1的字符串SSSi=0S_i=0表示第ii格是一个普通格子;Si=1S_i=1表示第ii格是一个GameOver格。

【输出格式】

输出用最短回合到达NN格时,每回合骰子的点数组成的序列,若有多种序列回合数都是最短,输出其中字典序最小的。

如果无法到达NN号格子,输出-1。

【输入样例#1】

9 3
0001000100

【输出样例#1】

1 3 2 3

【样例#1说明】

1,3,2,31,3,2,3的顺序扔出骰子的点数,高桥君会经过第1,4,61,4,6格最终到达第99格。

无法在33次以内到达第99格。1,3,2,31,3,2,3是所有44次到达第99格的点数序列中,字典序最小的。

【数据说明】

1N1051 \le N \le 10^5

1M1051 \le M \le 10^5

SS长度为N+1N+1,只由字符'0'和'1'组成,保证S0=0S_0=0SN=0S_N=0

9 3
0001000100
1 3 2 3
5 4
011110
-1
6 6
0101010
6

提示

制約

  • 1 < = N < = 105 1\ <\ =\ N\ <\ =\ 10^5
  • 1 < = M < = 105 1\ <\ =\ M\ <\ =\ 10^5
  • S = N + 1 |S|\ =\ N\ +\ 1
  • S S 01から成る
  • S[0] = S[0]\ = 0
  • S[N] = S[N]\ = 0

Sample Explanation 1

1 1 , 3 3 , 2 2 , 3 3 の順に目を出すと、高橋君はマス 1 1 , 4 4 , 6 6 を経由してマス 9 9 に到達することが出来ます。高橋君が 3 3 手以内にマス 9 9 に到達することは不可能であり、また 4 4 手でマス 9 9 に到達するような出目の列の中ではこれが辞書順で最小です。

Sample Explanation 2

高橋君はマス 5 5 に到達することが出来ません。