黑暗打击
首先这道题跟分型城市那道题很像,不难想到分治,设出方程即可
比如设\(h[i][0]\)表示\(i\)阶图案,重力方向是从上到下的总灌水方块,\(h[i][1]\)表示重力方向从左到右,\(h[i][2]\)表示重力方向从左到右而且是在图案最下面过去的
于是有\(h[i][0]=2(h[i-1][0]+h[i-1][1]+h[i-1][2])+3\cdot 2^{i-1}-2\),\(h[i][1]=h[i-1][0]+h[i-1][1]\),\(h[i][2]=h[i-1][1]+2h[i-1][2]+2^{i-1}-1\)
主要是讨论一下我的代码
首先是一个trick,就是读入优化加取模
看我的代码的矩阵里面是有负数的,这就会导致在递推的过程中,某些项可能会是负数(因为\((a-b)%p=(a%p-b%p+p)%p\),由于我们的代码没有写+p这一项,所以会有以上结果),这就会导致可能最后的答案也是负数,那么就要把答案加上p在取模
还要注意两个地方模数不同,对\(n\)的模数是\(p-1\),矩阵运算中的模数是\(p\)
至于什么样的矩阵可以使用扩展欧拉定理,还有待讨论(看这篇讨论好像是可对角化时总可用)