poj3233(矩陣快速冪)

2022-08-24 21:12:10 字數 2886 閱讀 7186

poj3233 

給定n ,k,m

然後是n*n行,

我們先可以把式子轉化為遞推的,然後就可以用矩陣來加速計算了。  矩陣是加速遞推計算的乙個好工具

我們可以看到,矩陣的每個元素都是乙個矩陣,其實這計算乙個分塊矩陣,我們可以把分塊矩陣展開,它的乘法和普通矩陣的乘法是一樣的。

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include

11 #include

12 #include 13

using

namespace

std;

14#pragma warning(disable:4996)

15 typedef long

long

ll;16

const

int inf = 1

<< 30;17

intmod;

18/*

19矩陣的元素是矩陣,即分塊矩陣

20分塊矩陣的乘法和普通矩陣的乘法是一樣的

21*/

22struct

matrix

2330

void

makezero()

3137}38

void

makeunit()

3945}46

};47

48 matrix operator*(const matrix &lhs, const matrix &rhs)

4962}63

}64return

ret;65}

66 matrix operator^(matrix &a, int

k)67

76 a = a *a;

77 k >>= 1;78

}79return

ret;80}

81int

main()

8299 a.mat[n + i][i] = a.mat[n + i][n + i] = 1

;100

}101 a = a ^ (k - 1

);102 matrix ans(2*n);

103ans.makezero();

104 m = 2 *n;

105for (i = 0; i < n; ++i)

106115

}116

}117

for (i = 0; i < n; ++i)

118123

}124

}125

return0;

126 }

view code

當然了,我們還可以用二分的方法方法來計算

19矩陣的元素是矩陣,即分塊矩陣

20分塊矩陣的乘法和普通矩陣的乘法是一樣的

21*/

22struct

matrix

2330

void

makezero()

3137}38

void

makeunit()

3945}46

};47

48 matrix operator*(const matrix &lhs, const matrix &rhs)

4962}63

}64return

ret;65}

66 matrix operator^(matrix &a, int

k)67

76 a = a *a;

77 k >>= 1;78

}79return

ret;80}

81 matrix operator+(const matrix &lhs, const matrix &rhs)

8293}94

return

ret;95}

96 matrix matrixsum(matrix a, int

k)97

106else

107111

return

ret;

112}

113int

main()

114127

}128 matrix ans =matrixsum(a, k);

129for (i = 0; i < n; ++i)

130134

return0;

135}

136 }

view code

poj 3233 矩陣快速冪

十個利用矩陣乘法解決的經典題目的最後一題 1a終於刷完十道題了,基本都是乙個思路 二分優化!a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 用二分變成 a 1 a 2 a 3 a 4 a 4 a 1 a 2 a 3 a 4 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a ...

poj 3233 矩陣高速冪

題意 給出乙個公式求這個式子模m的解 分析 本題就是給的矩陣,所以非常顯然是矩陣高速冪,但有一點。本題k的值非常大。所以要用二分求和來降低執行時間。include include include include include include include include include incl...

POJ 3233 矩陣快速冪 二分

題意 給你乙個n n的矩陣 讓你求s 思路 只知道矩陣快速冪 然後nlogn遞推是會tle的。所以呢 要把那個n換成log 那這個怎麼搞呢 二分!當k為偶數時 當k為奇數時 就按照這麼搞就能搞出來了 我是看的題解才a的,中間亂搞的時候犯了一些腦殘的錯誤 by siriusren include in...