codeforces #185 A Plant(矩阵快速幂+递推)
2014-09-18 20:53
316 查看
题目地址:http://codeforces.com/problemset/problem/185/A
通过这个题终于找回了点找递推公式的信心。。TAT。。
不过真心感觉CF的题目质量都真不错。。。
首先,第n个图形的上方,左下方,右下方的三个大三角形是跟第n-1个是一模一样的,所以是3*f(n-1)。
然后只剩下中间一个倒着的大三角形了,这时可以注意到,其实也跟第n-1个一模一样,只不过上下颠倒过来了,那这里的正着的三角形数就相当于是原来的倒三角形数。
而原来的倒着的三角形数可以用总的减去f(n-1)。而总的是1+2+3+...+2*(n-1)==4^(n-1)。再设g(n),让g(n)=4^(n-1).
那么就把问题转换成了构造一个矩阵A使得
f(n-1) f(n)
A * { } = { };
g(n-1) g(n)
这个矩阵A很容易构造出来。
2,1
0,4
然后用矩阵快速幂求出来即可。
代码如下:
通过这个题终于找回了点找递推公式的信心。。TAT。。
不过真心感觉CF的题目质量都真不错。。。
首先,第n个图形的上方,左下方,右下方的三个大三角形是跟第n-1个是一模一样的,所以是3*f(n-1)。
然后只剩下中间一个倒着的大三角形了,这时可以注意到,其实也跟第n-1个一模一样,只不过上下颠倒过来了,那这里的正着的三角形数就相当于是原来的倒三角形数。
而原来的倒着的三角形数可以用总的减去f(n-1)。而总的是1+2+3+...+2*(n-1)==4^(n-1)。再设g(n),让g(n)=4^(n-1).
那么就把问题转换成了构造一个矩阵A使得
f(n-1) f(n)
A * { } = { };
g(n-1) g(n)
这个矩阵A很容易构造出来。
2,1
0,4
然后用矩阵快速幂求出来即可。
代码如下:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; #define LL __int64 const int mod=1e9+7; struct matrix { LL ma[3][3]; }init, res; matrix Mult(matrix x, matrix y) { matrix tmp; int i, j, k; for(i=0;i<2;i++) { for(j=0;j<2;j++) { tmp.ma[i][j]=0; for(k=0;k<2;k++) { tmp.ma[i][j]=(tmp.ma[i][j]+x.ma[i][k]*y.ma[k][j])%mod; } } } return tmp; } matrix Pow(matrix x, LL k) { matrix tmp; int i, j; for(i=0;i<2;i++) for(j=0;j<2;j++) tmp.ma[i][j]=(i==j); while(k) { if(k&1) tmp=Mult(tmp,x); x=Mult(x,x); k>>=1; } return tmp; } int main() { int i, j; LL k; while(scanf("%I64d",&k)!=EOF) { init.ma[0][0]=2; init.ma[0][1]=1; init.ma[1][0]=0; init.ma[1][1]=4; res=Pow(init,k); LL ans=(res.ma[0][0]+res.ma[0][1])%mod; printf("%I64d\n",ans); } return 0; }
相关文章推荐
- [HIHO1555] 四次方根(递推,容斥,矩阵快速幂)
- codeforces 185A Plant(矩阵快速幂)
- HDU5667 sequence 递推求值 (矩阵快速幂)
- HDU - 2604 Queuing (递推 + 矩阵快速幂)
- [HDOJ2604]Queuing(递推,矩阵快速幂)
- NYOJ 301 递推求值【矩阵快速幂】
- hdu 5950 Recursive sequence(递推 快速幂矩阵)
- hdu 1143 递推 + 矩阵快速幂做法
- HDU4565-So easy-数学推到化简递推矩阵快速幂
- NYOJ 301 递推求值【矩阵快速幂】
- [51NOD1126]求递推序列的第n项(矩阵快速幂)
- 常系数齐次线性递推优化矩阵快速幂
- hdu 5171(矩阵快速幂,递推)
- ZOJ 3690 & HDU 3658 (矩阵快速幂+公式递推)
- 【HDU5950 2016ACM ICPC亚洲区沈阳站-重现赛 C】【矩阵快速幂】Recursive sequence 矩阵递推 i ^ 4
- poj 3734 Blocks (递推,矩阵快速幂)
- 递推关系转矩阵快速幂
- Codeforeces #420 E. Okabe and El Psy Kongroo 递推加矩阵快速幂
- NYOJ 1075 (递推 + 矩阵快速幂)
- hdu 2842(矩阵快速幂+递推)