description
婷婷是個喜歡矩陣的小朋友,有一天她想用電腦生成乙個巨大的n行m列的矩陣(你不用擔心她如何儲存)。她生成的這個矩陣滿足乙個神奇的性質:若用f[i][j]來表示矩陣中第i行第j列的元素,則f[i][j]滿足下面的遞推式:inputf[1][1]=1 f[i,j]=a*f[i][j-1]+b (j!=1) f[i,1]=c*f[i-1][m]+d (i!=1)
遞推式中a,b,c,d都是給定的常數。
現在婷婷想知道f[n][m]的值是多少,請你幫助她。由於最終結果可能很大,你只需要輸出f[n][m]除以1,000,000,007的餘數。
一行有六個整數n,m,a,b,c,d。意義如題所述output
包含乙個整數,表示f[n][m]除以1,000,000,007的餘數sample input
3 4 1 3 2 6sample output hint
樣例中的矩陣為:題解1 4 7 10
26 29 32 35
76 79 82 85
1<=n,m<=10^1000 000,a<=a,b,c,d<=10^9
由於不想寫高精度取模不想寫費馬小定理導致卡了一晚上常數超級難受很容易看出,二進位制快速冪是不可實現的
那麼就寫乙個十進位制快速冪
矩陣狀態優化一下,矩陣乘法優化一下
優化了兩小時終於卡過去了。。
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const ll mod=1000000007;
int sum[2][1100000],length[2];
inline
int read()
while(ch>='0' && ch<='9')
return x*f;
}inline
void del(int op,int b)
struct matrix
}stx,sty,tmp;
inline matrix mul(matrix u,matrix v,int n,int m,int p)
inline matrix pow_mod_two(matrix u,int b)
return ret;
}char ch[2][1100000];
inline matrix pow_mod_ten(matrix u,int k,int op,int len)
return ret;
}int a,b,c,d;
int main()
bzoj 3240 Noi2013 矩陣遊戲
有乙個巨大的n行m列的矩陣。這個矩陣滿足乙個神奇的性質 若用f i j 來表示矩陣中第i行第j列的元素,則f i j 滿足下面的遞推式 f 1 1 1 f i,j a f i j 1 b j 1 f i,1 c f i 1 m d i 1 遞推式中a,b,c,d都是給定的常數。現在問你f n m 的...
BZOJ3240 Noi2013 矩陣遊戲
婷婷是個喜歡矩陣的小朋友,有一天她想用電腦生成乙個巨大的n行m列的矩陣 你不用擔心她如何儲存 她生成的這個矩陣滿足乙個神奇的性質 若用f i j 來表示矩陣中第i行第j列的元素,則f i j 滿足下面的遞推式 f 1 1 1 f i,j a f i j 1 b j 1 f i,1 c f i 1 m...
BZOJ 3240 Noi2013 矩陣遊戲
給出 n,m 1 le n,m le 10 求 f n,m mod 10 9 7 begin f 1,1 1 f i,1 cf i 1,m d f i,j af i,j 1 b j neq 1 end 其中 1 le a,b,c,d le 10 9 對於遞推式 f i af b 當 a 1 時通項為...