bzoj3240 矩陣乘法 矩陣遊戲

2021-08-17 20:57:25 字數 1640 閱讀 4472

description

婷婷是個喜歡矩陣的小朋友,有一天她想用電腦生成乙個巨大的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]的值是多少,請你幫助她。由於最終結果可能很大,你只需要輸出f[n][m]除以1,000,000,007的餘數。

input

一行有六個整數n,m,a,b,c,d。意義如題所述

output

包含乙個整數,表示f[n][m]除以1,000,000,007的餘數

sample input

3 4 1 3 2 6

sample 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 時通項為...