2018.09.27【BZOJ5221】偏題(矩陣快速冪)(數學推理)
【問題描述】
斐波那契數列是一個經典遞推數列,即
在這個問題中,定義一個新數列,對於有
對於給出的四個整數,求。
資料保證總是整數。
【輸入格式】
從檔案中讀入資料。
一行四個整數。
【輸出格式】
輸出到檔案中。
一行一個整數,表示對取模後的值。
【樣例輸入1】
1 1 10 5
【樣例輸出1】
4
【樣例解釋1】
∙
∙
∙
∙
∙
∙
【樣例輸入2】
2 3 100 6
【樣例輸出2】
82
【資料規模】
對於30%的資料, ≤ 20。
對於60%的資料,。
對於80%的資料,。
對於100%的資料,,,。
解析:
看到以為不是線性遞推,整個人就方了。
然而聽到有dalao說是二次剩餘,貌似並沒有掉此題。
思路:
由上面的遞推式我們有結論
直接構造矩陣,快速冪推一下就行了。
程式碼:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define gc getchar
#define pc putchar
#define cs const
inline
ll getint(){
re ll num;
re char c;
while(!isdigit(c=gc()));num=c^48;
while(isdigit(c=gc()))num=(num<<1)+(num<<3)+(c^48);
return num;
}
ll mod;
ll n,F1,F0;
struct matrix{
ll a[3][3];
matrix(){memset(a,0,sizeof a);}
void origin(){
a[0][0]=1,a[0][1]=0,a[0][2]=0;
a[1][0]=0,a[1][1]=1,a[1][2]=0;
a[2][0]=0,a[2][1]=0,a[2][2]=1;
}
void init(){
a[0][0]=1,a[0][1]=1,a[0][2]=1;
a[1][0]=1,a[1][1]=0,a[1][2]=0;
a[2][0]=2,a[2][1]=0,a[2][2]=1;
}
ll *const operator[](cs int &offset){
return a[offset];
}
friend matrix operator*(matrix t,matrix b){
matrix c;
(c[0][0]=t[0][0]*b[0][0]%mod+t[0][1]*b[1][0]%mod+t[0][2]*b[2][0]%mod)%=mod;
(c[0][1]=t[0][0]*b[0][1]%mod+t[0][1]*b[1][1]%mod+t[0][2]*b[2][1]%mod)%=mod;
(c[0][2]=t[0][0]*b[0][2]%mod+t[0][1]*b[1][2]%mod+t[0][2]*b[2][2]%mod)%=mod;
(c[1][0]=t[1][0]*b[0][0]%mod+t[1][1]*b[1][0]%mod+t[1][2]*b[2][0]%mod)%=mod;
(c[1][1]=t[1][0]*b[0][1]%mod+t[1][1]*b[1][1]%mod+t[1][2]*b[2][1]%mod)%=mod;
(c[1][2]=t[1][0]*b[0][2]%mod+t[1][1]*b[1][2]%mod+t[1][2]*b[2][2]%mod)%=mod;
(c[2][0]=t[2][0]*b[0][0]%mod+t[2][1]*b[1][0]%mod+t[2][2]*b[2][0]%mod)%=mod;
(c[2][1]=t[2][0]*b[0][1]%mod+t[2][1]*b[1][1]%mod+t[2][2]*b[2][1]%mod)%=mod;
(c[2][2]
相關推薦
2018.09.27【BZOJ5221】偏題(矩陣快速冪)(數學推理)
【問題描述】
斐波那契數列是一個經典遞推數列,即Fibn=Fibn−1+Fibn−2Fib_n=Fib_{n-1}+Fib_{n-2}Fibn=Fibn−1+Fibn−2
在這個問題中,定義一個新數列,對於n≥2n ≥ 2n≥2有Fn=Fn−1+Fn−2+
2018.09.27【BZOJ1076】【洛谷P4273】【SCOI2008】獎勵關(狀壓DP)(期望DP)
洛谷傳送門
解析:
一眼看題面就是期望DP,再看資料範圍就知道是狀態壓縮
思路:
一般來說是期望倒著推,概率順著推,少數情況可以不遵守以上規則。
然而這個就顯然不是少數情況,我們仍然選擇倒推。
我們考慮什麼狀態能夠倒著轉移回來。
我們列舉下一輪丟出的寶物,看
【HDU1005】Number Sequence(矩陣快速冪)
記錄一個菜逼的成長。。
題目連結
題目大意:
f[1] = 1,f[2] = 1,f[n] = (a*f[n-1]+b*f[n-2])%7(n > 2)
給你a,b。求f[n]。
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個
HDU 4549 M斐波那契數列(矩陣快速冪+費馬小定理)
M斐波那契數列
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 3476 Accepted Submi
HDU 4549 M斐波那契數列(矩陣快速冪+費馬小定理)
這道題以為是很水的矩陣快速冪,把矩陣{1,1,1,0}進行快速冪乘遞推,ans[0][0]為a的指數,ans[0][1]為b的指數,但是瘋狂wa,百度搜題解發現用到了費馬小定理,A^X = A^( X mod phi(M) ) ( mod M ),又因為M為質數,所以ph
2018.09.22【JSOI2008】【BZOJ1016】最小生成樹計數(矩陣樹定理)(並查集)
傳送門
解析:
好的這是一道需要數學推理的矩陣樹題目。
首先我們考慮一個問題。
前置定理
我們先隨便做一棵最小生成樹。
重要定理:那麼在這棵生成樹中如果權值為www的邊有ttt條,那麼在所有最小生成樹中,權值為www的邊都有kkk條。
證明如下:
考慮在這棵
2018.09.26【TJOI2017】【BZOJ4888】【洛谷P3760】異或和(樹狀陣列)(差分)
洛谷傳送門
解析:
額,TJOITJOITJOI連續兩年考了位運算。。。
我還能說什麼。。。
PS:zxyoiPS:zxyoiPS:zxyoi不是天津oieroieroier。
思路:
一般位運算都
2018.09.26【BZOJ4260】Codechef REBXOR(01Trie)
傳送門
解析:
這種要求分成兩段的問題,一般就是處理出一個字首最大和一個字尾最大。
然後O(n)O(n)O(n)掃一遍就好了。
那麼,怎麼求?
這種異或問題當然還是要01Trie01Trie01Tri
2018.09.26【BZOJ4602】【洛谷P4079】【SDOI2016】齒輪(搜尋)(圖的遍歷)
洛谷傳送門
解析:
這道題O(V+E)O(V+E)O(V+E)就過了啊。。。
然而官方標解是並查集。。。
我。。。
思路:
只要按照圖的遍歷一邊跑一遍驗證就行了。
DFSDFSDFS比較好寫。
程
2018.09.29【洛谷P2106】Sam數(數位DP)(矩陣快速冪)
傳送門
解析:
其實這種只用位數轉移的數位DPDPDP,大概都可以用矩陣快速冪推。本質原因是每層的轉移方程與這是第幾層無關,比如這道題。
思路:
可以發現一個很顯然的情況,就是上面說的,這道題可以矩陣
2018.09.30【LOJ517】「LibreOJ β Round #2」計算幾何瞎暴力(01Trie)(二進位制拆分)
傳送門
解析:
看到標題的dalaodalaodalao先不要急著錘我。。。
這道題的二進位制拆分和01Trie01Trie01Trie不能混在一起,不要急著說01Trie01Trie01Trie就是二進位制拆分。。。
思路:
這道題可以說是非常好的一道資料結
2018.09.30【POJ3348】Cows(凸包)(三角剖分)
傳送門
解析:
讀優沒有寫負數又被卡了半個小時。。。
這裡採用JarrisJarrisJarris步進法求凸包。。主要講一講怎麼求多邊形面積。
思路:
滿足題意的顯然是這些點的凸包,而我們要做的就是求出凸包面積。
那麼怎麼求多邊形面積?
考慮三角剖分,我們將多
2018.09.29【BZOJ1026】【洛谷P2657】【SCOI2009】windy數(數位DP)
洛谷傳送門
解析:
由於資料範圍很小(相對於大部分數位DPDPDP題來說)。
我們只記錄當前位,當前位數字,是否是前導0,是否達到上界。
簡單DP記憶化搜尋一下就好了。
程式碼:
#include
2018.09.28【Vijos1053】Easy sssp(SPFA判負環)
傳送門
解析:
深入理解SPFASPFASPFA的本質。
思路:
由於是佇列優化的Bellman−FordBellman-FordBellman−Ford,SPFASPFASPFA也具有判負環的功能,
2018.09.29【HDU2089】不要62(數位DP)
傳送門
解析:
今天突然發現自己還沒寫過數位DPDPDP入門題。。。
思路:
我們從高位向低位DP,採用記憶化搜尋。
初始化fff陣列為−1-1−1,因為我們可能DPDPDP到某個狀態是沒有合法數的。
2018.09.28【BZOJ4318】OSU!(期望DP)
傳送門
解析:
不錯的期望DP入門題。
思路:
首先,要是沒有明白期望的線性性。這道題是無法理解的。
一個常識,要維護高次,我們可以將高次展開,利用低次來維護。
所以我們同時維護長度的期望,長度平方的期望,長度立方的期望。
注意這裡可能就有人不懂了,長度平方的
2018.09.18【BZOJ4517】【SDOI2016】排列計數(組合數學)(錯排問題)
Description
求有多少種長度為 n 的序列 A,滿足以下條件:
1 ~ n 這 n 個數在序列中各出現了一次
若第 i 個數 A[i] 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的
滿足條件的序列可能很多,序列數對 10^9+7 取模。
2018.11.08【CodeForces989】E. A Trance of Nightfall(矩陣快速冪)(倍增)
傳送門
解析:
考場上本來想寫倍增來著結果發現這個東西可以矩陣快速冪轉移,所以倍增陣列就用來優化矩陣快速冪了。。。(省去每次求出轉移矩陣的一個
O