UVA 10518
来源:互联网 发布:天敏t2网络机顶盒 编辑:程序博客网 时间:2024/06/04 17:55
题意:
F(0)=0,F(1)=1;
F(n)=F(i-1)+F(i-2)
假设F(n)是一个函数,求调用函数的调用次数
思路:
很明显F(0)=F(1)=1;
F(n)=F(i-1)+F(i-2)+1
然后矩阵快速幂…
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>using namespace std;#define lowbit(x) (x&(-x))typedef long long LL;const int maxn = 100005;const int inf=(1<<28)-1;#define Matrix_Size 5LL MOD;int Size;struct Matrix{ LL mat[Matrix_Size][Matrix_Size]; void clear() { memset(mat,0,sizeof(mat)); } void output() { for(int i = 0;i < Size;i++) { for(int j = 0;j < Size;j++) printf("%d ",mat[i][j]); printf("\n"); } } Matrix operator *(const Matrix &b)const { Matrix ret; for(int i = 0;i < Size;i++) for(int j = 0;j < Size;j++) { ret.mat[i][j] = 0; for(int k = 0;k < Size;k++) { long long tmp = (long long)mat[i][k]*b.mat[k][j]%MOD; ret.mat[i][j] = (ret.mat[i][j]+tmp); if(ret.mat[i][j]>=MOD) ret.mat[i][j] -= MOD; if(ret.mat[i][j]<0)//注意是否需要MOD ret.mat[i][j] += MOD; } } return ret; }};Matrix pow_M(Matrix a,long long n){ Matrix ret; ret.clear(); for(int i = 0;i < Size;i++) ret.mat[i][i] = 1; Matrix tmp = a; while(n) { if(n&1)ret = ret*tmp; tmp = tmp*tmp; n>>=1; } return ret;}int main(){ LL n; int Case=0; while(~scanf("%lld%lld",&n,&MOD)&&!(n==0&&MOD==0)) { printf("Case %d: %lld %lld ",++Case,n,MOD); Size=3; Matrix A,B; A.clear();B.clear(); A.mat[0][0]=1,A.mat[0][1]=1,A.mat[0][2]=1; A.mat[1][0]=1; A.mat[2][2]=1; B.mat[0][0]=1;B.mat[1][0]=1;B.mat[2][0]=1; if(n==1||n==0) { printf("%d\n",1%MOD); continue; } A=pow_M(A,n-1); A=A*B; printf("%lld\n",A.mat[0][0]); } return 0;}
0 0
- UVA 10518
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- Android开发之Intent.Action
- 二叉搜索树
- CSU 1727: The Fake Coin
- C++学习笔记——Mat类详解及元素的遍历方法
- tjut 4612
- UVA 10518
- 嵌入式学习-驱动开发-lesson1-字符设备驱动模型
- C++ hdoj 2007 平方和与立方和
- 浅析android事件分发机制
- 欢迎使用CSDN-markdown编辑器
- CSU 1729: 齿轮传动
- SVN上传不了类的问题,报错out of date的问题
- leetcode NO.371 sum of two integers
- 网络中的广播地址