题号:NC207268
时间限制:C/C++/Rust/Pascal 4秒,其他语言8秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
牛牛做了一个n*n的棋盘,棋盘每个格子有一个编号(从1到n*n),编号是成螺旋形状的,下面给出3*3和4*4的棋盘编号的例子。
由于隔离在家,牛牛只能自己一个人玩游戏。一开始棋子在1号格子上,分数为0。
每次牛牛会用骰子掷出1-6中的一个数字j
)
,然后棋子会沿编号向前移动j步(n号格子后面到1号格子),
且分数加上所有行号或者列号与当前格子相差小于j的所有格子的编号。
严格来说,函数f(x,y)=第x行第y列的格子的编号。比如n=3时,f(2,2)=9;n=4时,f(3,1)=11。
假设当前棋子在i号格子上,移动j步,那么棋子将移动到i'号格子上,
其中i'=(i+j-1)%(n*n)+1。且分数加上
牛牛想让你帮他写个程序,计算出每次移动完累计得到的分数。
为了防止输出过大,请返回分数对1,000,000,007取模后的值。
备注:
对于30%数据,
(q为询问次数)
对于100%数据,

(q为询问次数)