题目链接
模拟 + 矩阵快速幂
题目分析
题目大意
给定一个小球的坐标,小球会进行复制,向上下左右分别复制u, d, l, r
个,总数变为u+d+l+r+1
个球。小球复制以m
为周期,在一个周期内的每一秒对应不同的复制规则。问,经过n
秒后,所有小球的横坐标之和与纵坐标之和的和,即(x1+x2+…+xn+y1+y2+…+yn)。数字非常大,需要对 1,000,000,007取模。
解析
手动模拟一下样例,不难得出规律。看n
的数据范围,有1018大小,所以肯定不可能一秒一秒的去模拟,因为这个过程是周期变化的,所以想到矩阵快速幂不难。求出一个周期,即m
秒的过程求出一个矩阵,然后再用这个矩阵不断的乘初始的状态,得到第m, 2m, 3m... n/m*m
时刻的状态,再将这个情况乘以n%m
时刻的变换矩阵,即可求出时刻n
的x坐标之和以及y坐标之和。样例的数据比较水,需要多思考一下。
比较坑的点:
- x,y 的数据范围较大,所以要将x,y处理一下
x=(x%mod+mod)%mod
- 矩阵相乘时要乘完取模然后再加再取模,即应当
t.a[i][j]=(t.a[i][j]+(a[i][k]*b.a[k][j])%M)%M;
。如果t.a[i][j]=(t.a[i][j]+a[i][k]*b.a[k][j])%M;
是会wa的 - 加偏移量的时候,应当是球的数量乘偏移量,因为偏移量是对每一个球而言的。
代码
1 |
|