hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)
2014-02-25 20:53
483 查看
题目
第一次做是看了大牛的找规律结果,如下:
View Code
第一次做是看了大牛的找规律结果,如下:
//简单的矩阵快速幂 //f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. //注意origin矩阵中的第二行的a和b的位置摆放 #include<stdio.h> #include<string.h> int num=2,mod=7; struct matrix { int a[2][2]; }; matrix multiply(matrix x,matrix y)//矩阵乘法 { matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i=0;i<num;i++) { for(int k=0;k<num;k++) { for(int j=0;j<num;j++) { temp.a[i][j]=(temp.a[i][j]+x.a[i][k]*y.a[k][j])%mod; } } } return temp; } matrix calc(matrix a,int n)//矩阵快速幂——a^n { if(n==1)return a; matrix e; for(int i=0;i<num;i++) for(int j=0;j<num;j++) e.a[i][j]=(i==j); while(n) { if(n&1) e=multiply(e,a); n>>=1; a=multiply(a,a); } return e; } int main() { int n,a,b; while(scanf("%d%d%d",&a,&b,&n)!=EOF) { if(a==0&&b==0&&n==0)break; matrix origin= {0,1}; origin.a[1][0]=b;origin.a[1][1]=a; matrix answ={1,0, 1,0}; if(n>2) answ=multiply(calc(origin,n-2),answ); printf("%d\n",answ.a[1][0]); } return 0; }
View Code
相关文章推荐
- hdu 2604 Queuing(动态规划—>矩阵快速幂,更通用的模版)
- 【转】使用DirectUI技术实现QQ界面
- E - Ubiquitous Religions
- UICollectionView 介绍 <转>
- [UI界面]-UIImage的拉伸
- Java多线程总结之聊一聊Queue
- 多线程基础总结 之 -- ConcurrentLinkedQueue
- poj-2524 Ubiquitous Religions
- EF里Guid类型数据的自增长、时间戳和复杂类型的用法
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
- Java多线程--BlockingQueue
- [UIImage imageNamed:@""]使用误区
- POJ 3368 Frequent values(RMQ)
- LA 5031 Graph and Queries Treap
- OpenUI5 (SAPUI5) js框架简单介绍
- 可恶SQL SERVER的索引Disable后不能直接ENABLE,只有rebuild后才OK!SQL SERVER – Disable Clustered Index and Data Insert
- ios UIButton得 几种触发方式
- 基本的SQl语句:update table1 set field1=value1 where 范围
- 【问题】各种背景色&UIScrollView注意问题
- RDIFramework.NET 答客户问(2014-02-23)