Another kind of Fibonacce(矩阵快速幂,HDU3306)
Another kind of Fibonacci
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2470 Accepted Submission(s): 987
Each test case will contain three integers , N, X , Y .
N : 2<= N <= 231 – 1
X : 2<= X <= 231– 1
Y : 2<= Y <= 231 – 1
3 2 3
196
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
#define mod 10007
ll n;
ll x;
ll y;
struct matrix
{
ll v[4][4];
};
matrix mul(matrix m1, matrix m2)
{
matrix c;
for (int i = 0; i<4; i++)
for (int j = 0; j<4; j++)
{
c.v[i][j] = 0;
for (int k = 0; k<4; k++)
c.v[i][j] += (m1.v[i][k] * m2.v[k][j]) % mod;
c.v[i][j] %= mod;
}
return c;
}
matrix qupow(matrix A)
{
n--;
matrix res = A, m = A;
while (n)
{
if (n & 1)
res = mul(res, m);
n >>= 1;
m = mul(m, m);
}
return res;
}
void solve(matrix A)
{
matrix temp = qupow(A);
ll ans = 0;
for (int i = 0; i<4; i++)
ans += temp.v[i][0]%mod;
ans%=mod;
printf("%lld\n",ans);
//cout << ans << endl;
}
int main()
{
matrix A;
ll a, b, c;
while (~scanf("%lld%lld%lld",&n,&x,&y))
{
a = x*x%mod;
b = y*y%mod;
c = x*y * 2%mod;
//matrix A = { 1,0,0,0 ,1,a,1,x,0,b,0,0 0,c,0,y };
A.v[0][0]=1;
for(int i=1;i<4;i++)
A.v[0][i]=0;
A.v[1][0]=1;
A.v[1][1]=a%mod;
A.v[1][2]=1;
A.v[1][3]=x%mod;
A.v[2][0]=0;
A.v[2][1]=b%mod;
A.v[2][2]=0;
A.v[2][3]=0;
A.v[3][0]=0;
A.v[3][1]=c%mod;
A.v[3][2]=0;
A.v[3][3]=y%mod;
/*for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
cin>>A.v[i][j];*/
solve(A);
}
return 0;
}
Another kind of Fibonacce(矩阵快速幂,HDU3306)的更多相关文章
- hdu3306 Another kind of Fibonacci【矩阵快速幂】
转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://acm.hdu.edu.cn/showproblem. ...
- 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)
题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...
- 51nod 算法马拉松18 B 非010串 矩阵快速幂
非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...
- 51nod 1113 矩阵快速幂
题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- HDU5950(矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...
- 51nod 1126 矩阵快速幂 水
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- hdu2604(递推,矩阵快速幂)
题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
随机推荐
- iOS 按钮连续提交执行一次(如留言提交,多次拍照问题)
在很多项目中暴力测试时会出现多次点击执行一个方法 可以用下面的语句进行解决 //先将未到时间执行前的任务取消. [[self class] cancelPreviousPerformRequests ...
- hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)
题意:有一个递推式f(x) 当 x < 10 f(x) = x.当 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...
- 关于mysql的初步学习
1.在windows上使用CMD链接数据库 这是原始用户表 users 这是通过 语句插入而来的 user表和user2表结构相同 user2 的数据 通过如下SQL语句从users表赋值过来: in ...
- phpcms ——模板标签详细使用说明
使用phpcms总是要查询各种标签,实在很烦,只好找个比较全的来备查.因为自己写一个orm来配合调用也没那么容易无缝的嵌入到引擎当中. 获取父分类下面的子分类 {loop subcat(77) $k ...
- ssh相关命令
ssh命令 ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器. 语法ssh(选项)(参数)选项 -1:强制使用ssh协议版本1: -2:强制使用ssh协 ...
- windows下批量换程序——运维常用
Windows一批机器,需要批量换程序.写个脚本给大家. net stop sharedaccess (关闭防火墙) del /s d:\*.log d:\*.vbs d:\*.pdb d:\*.vb ...
- setTimeout 倒计时
<script type="text/javascript"> //设定倒数秒数 var t = 10; //显示倒数秒数 function showTime(){ t ...
- CentOS 下PHP的卸载
一.卸载1.使用命令 rpm -qa|grep 列出需要卸载的软件包rpm -qa|grep php使用rpm -e 加包名rpm -e php-4.3.9-3.15 二.安装1.首先更新系统yum ...
- BackgroundWorker的DoWork方法中发生异常无法传递到RunWorkedCompleted方法
在使用C#的BackgroundWorker时需要在UI界面上显示DoWork中发生的异常,但怎么调试都无法跳转到界面上,异常也不会传递到RunWorkerCompleted方法中(e.Error为空 ...
- 为用户增加sudo权限(修改sudoers文件)
在使用Linux系统过程中,通常情况下,我们都会使用普通用户进行日常操作,而root用户只有在权限分配及系统设置时才会使用,而root用户的密码也不可能公开.普通用户执行到系统程序时,需要临时提升权限 ...