快速冪模板
#define n 150模板需要注意的說開200x200以上可能爆棧,這時候必須把封裝去了struct
martix
inline
void
build()
inline
void
clear()
} aa;
martix
operator *(const martix &a, const martix &b)
}returnc;}
martix
operator ^( martix a, ll k)
return
tmp;
}
技巧1:對矩陣ak次冪求和可以構造矩陣
a e0 e
新矩陣的k+1次冪的右上即為所求
技巧2:齊次遞推數列可以構造矩陣快速求出
將所有項看作列向量就可以很方便地構造,若要求多項和,只需在構造的矩陣中加一列即可
技巧3:從u到v恰好走k步
轉移矩陣k次冪即可
vijos 1049
//ac**#define local
#include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define x_mem(x,y,z) (x_mem[x][y][z] ? x_mem[x][y][z] :x_mem[x][y][z]=mem(x,y,z))
//x_init=0 mem_macro
#define inf 0x3f3f3f3f
#define mod 1000000007
#define for(i,j,k) for(int i=j;i#define ford(i,j,k) for(int i=j;i>k;i-=1)
#define ull unsigned long long
#define ll long long
#define sz(x) int(x.size())
#define pb push_back
#define n 150
//int mod;
struct
martix
inline
void
build()
inline
void
clear()
} aa;
martix
operator *(const martix &a, const martix &b)
}returnc;}
martix
operator ^( martix a, ll k)
return
tmp;
}int
main()
ans=ans^(k/m);
for(i,
0,k%m)
int anss[110
];for(i,
0,n)
for(j,
0,n)
if(ans.mar[i][j]) anss[i]=j;
/*for(i,0,n)
vijos 1194
//ac**#define local
#include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define x_mem(x,y,z) (x_mem[x][y][z] ? x_mem[x][y][z] :x_mem[x][y][z]=mem(x,y,z))
//x_init=0 mem_macro
#define inf 0x3f3f3f3f
#define mod 1000000007
#define for(i,j,k) for(int i=j;i#define ford(i,j,k) for(int i=j;i>k;i-=1)
#define ull unsigned long long
#define ll long long
#define sz(x) int(x.size())
#define pb push_back
#define n 150
//int mod;
intp;
struct
martix
inline
void
build()
inline
void
clear()
} aa;
martix
operator *(const martix &a, const martix &b)
}returnc;}
martix
operator ^( martix a, ll k)
return
tmp;
}int
main()
aa=aa^n;/*
for(i,0,l)
神題,要求用1x2全覆蓋nxm
由於n,m極度的不均勻(m<5,n<1e9),而1x2最多影響兩行,所以考慮乙個狀態轉移矩陣
狀態為單獨一行被覆蓋的格仔的二進位制表示,預設前面的行已經被全覆蓋。則步進的狀態轉移就可以看作在全覆蓋當前行且最大影響範圍不超過下一行的前提下任意的擺放結果(只看下一行的覆蓋情況)
轉移的條件是(i|j)==1<
矩陣十題1(nyoj298)
繼續深造矩陣類題目,看到大佬們都有矩陣十題部落格,我也學習了,只有題目,沒有解析系列1 通過矩陣變換將所有操作都存到矩陣中,最後輸出答案即可。矩陣的構造方法 直接上 include include include include include include include include a 3...
矩陣十題 六 poj3070 Fibonacci
id 3070 題目大意 給定n和10000,求第n個fibonacci數mod 10000 的值,n不超過2 31。結果保留四位數字。非常easy的題,和之前做過的相比簡單非常多了。構造最簡單的斐波那契數列矩陣。include include includeusing namespace std ...
矩陣十題 六 poj3070 Fibonacci
id 3070 題目大意 給定n和10000,求第n個fibonacci數mod 10000 的值,n不超過2 31。結果保留四位數字。非常easy的題,和之前做過的相比簡單非常多了。構造最簡單的斐波那契數列矩陣。include include includeusing namespace std ...