hdu5015 233 Matrix(矩陣快速冪)

2021-07-04 19:43:44 字數 714 閱讀 2046

解題思路:

根據題目我們發現n的值最大只有10,而m的值最大為10^9,因此可以考慮使用矩陣冪運算,以列為單位

我們根據推理可以發現由前一列乘以某個矩陣之後可以得到後一列,矩陣如下:

10 0 0 0 0 ···· 1

10 1 0 0 0 ···· 1

10 1 1 0 0 ····1

10 1 1 1 1 ···1

0  0 0 0 0 ···1 

同時給a[0]賦值為23,a[n+1]賦值為3即可

**:#include #include #define mod 10000007

typedef long long ll;

using namespace std;

typedef struct matrixnodmatrix;

ll n,m;

matrix mat(matrix a,matrix b)

return t;

}ll a[12];

int main(){

while(scanf("%i64d%i64d",&n,&m)!=eof){

a[0]=23;a[n+1]=3;

for(int i=1;i<=n;i++) scanf("%i64d",&a[i]);

matrix t;

memset(t.m,0,sizeof(matrix));

for(int i=0;i

HDU 5015 233 Matrix 矩陣遞推

題意 給出乙個矩陣,第一行從左到右分別是233,2333,23333,2333333。給出第一列的元素。其他的元素是它上面和左面的元素的和。求右下角元素的值。思路 在比賽的時候,總是想從右下角的元素遞推回去,找到公式,直接計算。發現沒法高效的求和。這道題正確的解法是利用矩陣從第二列開始遞推,每次得到...

HDU5015 233 Matrix 矩陣快速冪

題目鏈結 題意 給定乙個矩陣的第0列的第1到n個數,第一行第1個數開始每個數分別為233,2333.求第n行的第m個數。思路 將第一行的數全部右移一位,用前一列遞推出下一列,構造矩陣,類似如下 1 0 0 0 0 0 0 1 10 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 ...

HDU5015 233 Matrix 矩陣高速冪

hdu5015 233 matrix 矩陣高速冪 題目鏈結 題目大意 給出n m矩陣,給出第一行a01,a02,a03 a0m 各自是233,2333,23333.再給定第一列a10,a10,a10,a10,an0.矩陣中的每乙個元素等於左邊的加上上面的,求出anm.解題思路 先要依據矩陣元素的特徵...