变化的飞行棋
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

        启明小朋友正在玩变化的飞行棋,变化的飞行棋是一个长度为n的环,每个格子上都有一个数。一开始启明小朋友在第1格,每回合可以掷一个骰子,掷到几朝上,启明小朋友就向前走几步,掷完骰子到达新的格子后可以按照格子上的数向前走或者向后走(正数向前走,负数向后走),也可以不走。(只可以在掷完骰子后走一次,不可以连续走)不同寻常的是,这个飞行棋在每次超过终点(第n格)时会变化,第i个格子上的数变化bi。(如果后退的时候刚好经过终点,第i个格子上的数变化-bi)桃也野举办了一场比赛,第一个成功绕环m圈的人获胜(完整的跑完一圈才算成功绕环一圈),需要超过第m圈的第n格(不可以恰好落在这一格)。为了成为第一个获胜的人,启明小朋友开挂了,他可以任意操纵骰子朝上的点数(骰子的点数为1到6),他想知道他最少掷多少次骰子可以获胜。

输入描述:

第一行一个整数n,表示环的长度。(1<=n<=10000)
第二行一个整数m,表示要绕环m圈。(1<=m<=500)
第三行n个整数,每个格子上的数ai。(-1000<=ai<=1000)
第四行n个整数,每次格子变化的量bi。(-1000<=bi<=1000)

输出描述:

一个整数,掷骰子的最少次数。
示例1

输入

复制
40
1
1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 -3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

输出

复制
3

说明

第一个骰子掷1:1->2
选择跳:2->20
第二个骰子掷2:20->22
选择跳:22->19
第三个骰子掷1:19->20
选择跳:20->45

备注:

后退最多退到第一圈的第一格。