首页 > 试题广场 >

下棋

[编程题]下棋
  • 热度指数:57 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 512M,其他语言1024M
  • 算法知识视频讲解
牛牛做了一个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取模后的值。
示例1

输入

4,[1,2,5,6,2]

输出

[48,138,274,410,510]

备注:
对于30%数据,(q为询问次数)
对于100%数据,(q为询问次数)

这道题你会答吗?花几分钟告诉大家答案吧!