AT_abc146_f [ABC146F] Sugoroku
题目描述
ABC146F 双六
高桥君在玩双六棋,棋盘格由用$0$到$N$编号的共$N+1$个格子构成。每一回合,高桥君会扔一个点数$1$到$M$的骰子。如果高桥君当前在第$i$格,骰子扔出$k$点,高桥君就前进到第$i+k$格。 如果此时$i+k > N$,高桥君立刻输掉。另外,棋盘上还有若干个“GameOver格”,如果高桥停在这些格子,也立刻输掉游戏。
假设高桥君可以自由控制骰子的点数,那么他从$0$号格子出发,到达$N$号格子,最短需要多少回合?输出用最短回合到达$N$格时,每回合骰子的点数组成的序列;如果无法到达$N$号格子,输出-1。
输入格式
第1行,两个正整数$N,M$
第2行,一个长为$N+1$的字符串$S$。$S_i=0$表示第$i$格是一个普通格子;$S_i=1$表示第$i$格是一个GameOver格。
输出格式
输出用最短回合到达$N$格时,每回合骰子的点数组成的序列,若有多种序列回合数都是最短,输出其中字典序最小的。
如果无法到达$N$号格子,输出-1。
【输入样例\#1】
```
9 3
0001000100
```
【输出样例\#1】
```
1 3 2 3
```
说明/提示
按$1,3,2,3$的顺序扔出骰子的点数,高桥君会经过第$1,4,6$格最终到达第$9$格。
无法在$3$次以内到达第$9$格。$1,3,2,3$是所有$4$次到达第$9$格的点数序列中,字典序最小的。
$1 \le N \le 10^5$
$1 \le M \le 10^5$
$S$长度为$N+1$,只由字符'0'和'1'组成,保证$S_0=0$,$S_N=0$。