快速冪 普通快速冪 矩陣快速冪

2021-07-14 16:42:08 字數 1590 閱讀 4646

題意: 

n個人排隊,f表示女,m表示男,包含子串『fmf』和『fff』的序列為o佇列,否則為e佇列,有多少個序列為e佇列。

分析: 

矩陣快速冪入門題。 

下面引用巨巨解釋:

用f(n)表示n個人滿足條件的結果,那麼如果最後乙個人是m的話,那麼前n-1個滿足條件即可,就是f(n-1); 

如果最後乙個是f那麼這個還無法推出結果,那麼往前再考慮一位:那麼後三位可能是:mmf, fmf, mff, fff,其中fff和fmf不滿足題意所以我們不考慮,但是如果是 

mmf的話那麼前n-3可以找滿足條件的即:f(n-3);如果是mff的話,再往前考慮一位的話只有mmff滿足條件即:f(n-4) 

所以f(n)=f(n-1)+f(n-3)+f(n-4),遞推會跪,可用矩陣快速冪 

構造乙個矩陣: 

矩陣快速冪和普通的快速冪原理是一樣的,如果不懂可以先去補補快速冪。

int power(int x,int y)

return ans;

}

#includeusing namespace std;

const int inf=0x3f3f3f3f;

typedef long long ll;

int l,mod;

struct node

void init(ll a)

};node mult(node a,node b)

return c;

}node power(node n,ll p)

return ans;

}int main()

return 0;

}

#include#include#includeusing namespace std;

const int mod=10000;

struct node

}a,b;

long long n;

node operator *(node a,node b)

void power(long long y)

}int main()

return 0;

}

傳送門:

#include#include#includeusing namespace std;

struct node

void init()

};int n,s,f,m,mod;

node operator *(node x,node y)

node power(node x,int y)

return res;

}int main()

void init()

}; ll p,n,m,h=2;

node operator *(node x,node y)

return res.f[0][0];

} int main()

return 0;

}

快速冪(整數快速冪 矩陣快速冪)

1 整數快速冪 例如求x 8 就是x x x x x x x x 正常的運算方式是,x的值乙個個往上乘上去,乘法運算執行7次 x x x x x x x x 也可以採用這種運算方式,先進行乘法得到x 2再對x 2進行三次乘法。這種運算要明顯比第一種情況要快 所以對於整數快速冪,也是結合了這種思想 x...

快速冪(矩陣快速冪)

求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...

快速冪 矩陣快速冪

快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...