1> p1926 斐波那契
#include#include#include
using
namespace
std;
long
long
n;const
int mod=1000000007
;long
long nw[2][2],ans[2][2
];long
long t[2][2
];void
mul1()
void
mul2()
void
mul3()
intmain()
nw[0][0]=nw[1][0]=nw[0][1]=1
; ans[
0][0]=ans[1][1]=1
;
while
(n)
mul3();
return0;
}
2>廣義斐波那契數列
這道題中的乘法,會爆ll,
所以只能用pow_add(),具體見**
#include#include#include
using
namespace
std;
long
long
a,c,a0,n,mod,g;
long
long ans[3][3],nw[3][3],t[3][3
];long
long pow_add(long
long x,long
long
y)
return
ans;
}void
mul1()
void
mul2()
intmain()
printf(
"%d\n
",(pow_add(a1,ans[0][0])+pow_add(a0,ans[0][1])+pow_add(c,ans[0][2]))%mod%g);
return0;
}
3>ch30擺花
用矩陣快速冪加速dp,優化時間複雜度和空間複雜度
60->100
#include#include#include
using
namespace
std;
intn,m;
const
int n=103,mod=1e9+7
;long
long
nw[n][n],ans[n],t[n][n],tt[n];
void
mul1()
void
mul2()
void
mul3()
intmain()
ans[
0]=1
;
while
(m)
mul3();
return0;
}
快速冪,矩陣乘法,矩陣快速冪
快速冪利用二進位制 複雜度 log級 include include include include using namespace std typedef long long ll typedef unsigned long long ull int q power int a,int b,int...
Tr A(矩陣乘法快速冪)
problem description a為乙個方陣,則tr a表示a的跡 就是主對角線上各項的和 現要求tr a k 9973。input 資料的第一行是乙個t,表示有t組資料。每組資料的第一行有n 2 n 10 和k 2 k 10 9 兩個資料。接下來有n行,每行有n個資料,每個資料的範圍是 0...
Fibonacci數列(矩陣乘法快速冪)
題目描述 定義 f0 f1 1,fn fn 1 fn 2 n 2 稱為fibonacci數列。輸入n,求fn mod q。其中1 q 30000。輸入描述 第一行乙個數t 1 t 10000 以下t行,每行兩個數,n,q n 109,1 q 30000 輸出描述 檔案包含t行,每行對應乙個答案。樣例...