矩陣快速冪(裸,模板)
題目來源:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1137
【題意】
中文題意不在敘述,只是讓求一個矩陣的乘法而已。
【思路】
終於可以做矩陣快速冪的題了,這個專題一直被我拖到現在,作為一個弱弱內心無比難受,終於可以把它學了,十分開心。
此題非常裸,直接過載一個乘號運算子就可以了,只不過矩陣乘法要知道怎麼回事。不知道的可以看下這位大佬的部落格,知道的也就可以看下,加深理解:矩陣乘法
並且初始矩陣這個概念也要知道,這些可以看下大佬的矩陣快速冪視訊
【程式碼】
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<limits.h>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int mod=1e9+7;
typedef unsigned long long ll;
typedef long long LL;
const int N=100+10;
LL n,m;
struct mat
{
LL a[N][N];
};
mat operator*(mat s,mat t)
{
mat r;
LL x;
mem(r.a,0);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
x=0;
for(int k=1; k<=n; k++)
x+=(s.a[i][k]*t.a[k][j])%mod;
r.a[i][j]=x%mod;
}
return r;
}
void init(mat& s)
{
for(int i=1; i<=n; i++)
s.a[i][i]=1;
}
mat pow_quick(mat r)
{
mat ans;
init(ans);
while(m)
{
if(m&1)
ans=ans*r;
r=r*r;
m>>=1;
}
return ans;
}
int main()
{
mat t;
scanf("%lld%lld",&n,&m);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
scanf("%lld",&t.a[i][j]);
t=pow_quick(t);
for(int i=1; i<=n; i++)
{
printf("%lld",t.a[i][1]);
for(int j=2; j<=n; j++)
printf(" %lld",t.a[i][j]);
printf("\n");
}
}
相關推薦
矩陣快速冪(裸,模板)
題目來源:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1137 【題意】 中文題意不在敘述,只是讓求一個矩陣的乘法而
矩陣快速冪(共軛函式)
題目連結:https://cn.vjudge.net/contest/261339#problem/A 具體思路:一開始看到這個題,覺得用快速冪就能很簡單的求出來,結果發現,要是想用快速冪的話,每次計算必然會損失一定的精度,並且取餘的時候必須進行強制轉換,所以這個方法絕對不行。 然後就開
矩陣快速冪 ——(遞推表示式)
矩陣快速冪 首先知道矩陣 矩陣(Matrix)是一個按照長方陣列排列的複數或實數集合; 矩陣乘法: 定義:設A為 m×p 的矩陣,B為 p×n 的矩陣,那麼稱 m×n 的矩陣C為矩陣A與B的乘積,記作 C=A×B ,其中矩陣C中
矩陣快速冪 (模板)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 2; const int mod = 10000; //矩陣結構體 stru
矩陣快速冪(模板+例題)
模板 #include<cstdio> #include<cmath>//pow函式,其實沒啥用 using namespace std; int n;long long k; const int N=pow(10,9)
Queuing(矩陣快速冪(遞推and模板))
【題目來源】:https://vjudge.net/problem/HDU-2604 【題意】 f,m分別是female與male的縮寫,假設有一個佇列裡面是這些字母縮寫,長度為L,那麼共有2^L種,如果含有fmf或者fff這種子佇列的佇列被稱為0佇列,其餘
A Simple Math Problem(矩陣快速冪(模板))
【題目來源】:https://vjudge.net/problem/HDU-1757 【題意】 求解數k對應的f(k)%m,關係式如題面所示。 【思路】 既然給出了遞推式,又因為k的取值上限相當大,所以使用矩陣快速冪來實現f(k)的求解。這個時候就可以用
cf 450b 矩陣快速冪(數論取模 一大坑點啊)
sent double res nta note follow efi ted containe Jzzhu has invented a kind of sequences, they meet the following property: You are giv
矩陣快速冪 (hdu1575)
矩陣快速冪 和一般的整數快速冪 是非常相似的 首先會以下 一般的快速冪 int pow(int n,int k) { int ans=1; while(k) { if(k&1) ans*=n; k>>
矩陣快速冪(poj 3070)
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19397
矩陣快速冪(共軛函式兩種遞推式)
題目連結:https://cn.vjudge.net/contest/261339#problem/B AC1:ans= x(n)+y(n)*sqrt(6),所以,ans=x(n)+y(n)*sqrt(6)+(x(n)-y(n)*sqrt(6))-(x(n)-y(n)*sqrt(6))=2*
矩陣快速冪(模版) 快速乘 + 快速冪 + 矩陣快速冪
矩陣快速冪:首先前置技能: 快速冪 + 矩陣乘法。 1 快速冪 1.1 快速乘法 1.1.1 引用自2009年國家集訓隊論文,駱可強:《論程式底層優化的一些方法與技巧》 (膜膜膜) 可以根據需要換成uLL (unsigned long long)
矩陣快速冪(構造)
構造矩陣 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #incl
矩陣快速冪(以斐波那契數列為例)
小 M 玩數列 【問題描述】 小 W 發現了一個神奇的數列: () = ( − 1) + ( − 2) { ≥ 3, (1) = 1, (2) = 1} ,這就是著名的 Fibonacci Se
快速冪和矩陣快速冪(複雜度Olog(n))C++實現
快速冪 快速冪顧名思義,就是快速算某個數的多少次冪。其時間複雜度為 O(log₂N), 與樸素的O(N)相比效率有了極大的提高。 快速冪實現原理 快速冪的原理比較好懂,就是說假如我們求的是3^11,其實比較通用的辦法就是 for 1:11 a*=3; 時間複雜
CCF201409-5拼圖(狀態壓縮DP+矩陣快速冪) (骨牌覆蓋問題拓展 )
文章目錄 拼圖 題意: 分析: 拼圖 題意: 分析: 這是hiho1143 && hiho 1151&&1033 骨牌覆蓋 V2的拓展 搜尋
矩陣快速冪(總結)
基礎知識:(會基礎的直接看應用部分) (1)矩陣乘法 簡單的說矩陣就是二維陣列,數存在裡面,矩陣乘法的規則:A*B=C 其中c[i][j]為A的第i行與B的第j列對應乘積的和,即: 程式碼: const int N=100; int c[N][N]; v
快速冪(原理,一般,遞迴,位運算演算法)
因為一開始對位運算不是很明白,加上2進位制權值忽然一說像聽了一個新詞,第一次碰見放下了,第二次也,,第三次也,今天就好好把它給看明白。 概念:快速計算底數的n次冪。 例題:(想明白就自己拿出筆紙耐心看下去,自己寫出來的才有自信說看明白了) 求a的b次方;
HDU 4549 M斐波那契數列 (矩陣快速冪+費馬小定理)
思路: 通過列出幾項我們就可以發現ab的指數是斐波那契數列。然後博主就開(智)心(障)的用矩陣快速冪算指數了。。 卻忘了一件事。。。誰說的取模對指數封閉的啊???md瘋狂wa了六七次。 取模對乘法
HDU 4549 M斐波那契數列 (矩陣快速冪 + 費馬小定理)
M斐波那契數列F[n]是一種整數數列,它的定義如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 現在給出a, b, n,你能求出F[n]的值嗎? Input 輸入包含多組測試資料; 每組資料佔一行,包含3個