hit2255 Not Fibonacci
2015-08-15 17:23
281 查看
(http://acm.hit.edu.cn/hoj/problem/view?id=2255)
我直接构造矩阵,s(n)=s(n-1)+f(n-1)+f(n-2);
f(1)=b, f(0)=a, s(1)=a+b;
a和b的值可能为负,所以要 (x%mod+mod)%mod,防止负数;
我直接构造矩阵,s(n)=s(n-1)+f(n-1)+f(n-2);
f(1)=b, f(0)=a, s(1)=a+b;
a和b的值可能为负,所以要 (x%mod+mod)%mod,防止负数;
/*This Code is Submitted by 1229836201 for Problem 2255 at 2015-08-14 16:55:36*/ #include <iostream> #define mod 10000000 using namespace std; const int Max=3; typedef struct { long long m[Max][Max]; } Matrix; Matrix P={0,0,0,//不能把p,q写在这,要在主函数里输入 1,0,0, 0,0,1}; Matrix I={1,0,0, 0,1,0, 0,0,1}; Matrix matrixmul(Matrix a,Matrix b) { Matrix c; for(int i=0;i<Max;i++) for(int j=0;j<Max;j++) { c.m[i][j]=0; for(int k=0;k<Max;k++) { a.m[i][k]=(a.m[i][k]%mod+mod)%mod; b.m[k][j]=(b.m[k][j]%mod+mod)%mod; c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod; } c.m[i][j]=(c.m[i][j]%mod+mod)%mod; } return c; } Matrix quickpow(long long n) { Matrix m=P,b=I; while(n>=1) { if(n&1) b=matrixmul(b,m); n=n>>1; m=matrixmul(m,m); } return b; } int main() {long long a,b,p,q,s,e; long long sum,sum1; int t; Matrix tmp,tmp1; cin>>t; while(t--) { cin>>a>>b>>p>>q>>s>>e; P.m[0][0]=p; P.m[0][1]=q; P.m[2][0]=p; P.m[2][1]=q; if(e>=2) { tmp=quickpow(e-1); sum=(tmp.m[2][0]*b)%mod+(tmp.m[2][1]*a)%mod+(tmp.m[2][2]*(a+b))%mod; sum=(sum%mod+mod)%mod; } if(e==1)//讨论边界 sum=((a+b)%mod+mod)%mod; if(e==0) sum=(a%mod+mod)%mod; if(s>=3) { tmp1=quickpow(s-2); sum1=(tmp1.m[2][0]*b)%mod+(tmp1.m[2][1]*a)%mod+(tmp1.m[2][2]*(a+b))%mod; sum1=(sum1%mod+mod)%mod; } if(s==0) sum1=0; if(s==1) sum1=(a%mod+mod)%mod; if(s==2) sum1=((a+b)%mod+mod)%mod; long long ans=(sum-sum1+mod)%mod; cout<<ans<<endl; } return 0; }
相关文章推荐
- 多少人知道需求规格说明书是什么
- 输入整型数组和排序标识,对其元素按照升序或降序进行排序
- 【男女好像锁车里了衣服都脱了】
- CSS 命名管理 之 BEM
- 如何让PHP脚本在cli模式下执行时可接受选项和值的输入
- 闲来无事用html做了个win8.1的界面,看起来就跟真的一模一样!
- MFC树形控件(CTreeCtrl)用法(上)
- hdu1568
- HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】
- 隐马尔可夫模型(HMM)原理
- 献给初学者的10个Git技巧
- 华为0J之---字符逆序(出现问题)
- 【Python基础】Python中的协程
- hdu 3635 Dragon Balls
- hdu 1757
- JavaScript高级程序设计笔记(3)
- BZOJ2976 : [Poi2002]出圈游戏
- HDU 5289 Assignment (二分+RMQ)
- **IOS开发之关键字category(类别)详解**
- 线程的创建