又是数数题QwQ…
传送门
题解
首先注意题目中说的是有$n^2$个格子,也就是$(n+1)^2$个格点。
以下是出题人的推导:
首先我们可以发现每一行是独立的,所以只需要处理一行的答案即可
设$F[i][0]$表示一行中摆了$i$个位置且第$i$个位置不摆放棋子的方案数
设$F[i][1]$表示一行中摆了$i$个位置且第$i$个位置摆放棋子的方案数
设$Ans[i]$表示$F[i][0]+F[i][1]$
那么忽略第二个限制可以发现有:
$F[i][0]=F[i-1][0]+F[i-1][1]$
$F[i][1]=F[i-1][0]$
所以有
$Ans[i]$
$=F[i][0]+F[i][1]$
$=2F[i-1][0]+F[i-1][1]$
$=(F[i-1][0]+F[i-1][1])+(F[i-2][0]+F[i-2][1])$
$=Ans[i-1]+Ans[i-2]$
好了很显然这是一个斐波那契数列。自己再推一下,注意一下细节,不难发现最后的答案就是
矩阵加快速幂就可以在$\Theta(\log n)$的复杂内求解。
还有一个问题,由于n和P都非常大,直接乘long long也会boom。所以这里用了一个类似于快速幂的方法来求$(a*b)\mod P$的值。虽然复杂度多了一只log,但是很好写,并且避免了高精度又臭又长的代码和大常数复杂度。
代码
还挺好写的呢poi。
1 |
|