Codevs 1070 普通递归关系(矩阵乘法)
1070 普通递归关系
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 大师 Master
题目描述 Description
考虑以下定义在非负整数n上的递归关系
f(n) = f0 (if n = 0)
= f1 (if n = 1)
= a*f(n-1)+b*f(n-2) otherwise
其中a,b是满足以下两个条件的常数:
(1) a2+4b>0
(2) |a-sqrt(a2+4b)| <= 2 // sqrt是根号的意思
给定f0,f1, a, b和n,请你写一个程序计算fn,可以假定fn是绝对值不超过109的整数(四舍五入)。
输入描述 Input Description
输入文件一行依次给出5个数,f0, f1, a, b和n, f0,f1是绝对值不超过109,n是非负整数,不超过109。另外,a、b是满足上述条件的实数,且|a|,|b|<=106。
输出描述 Output Description
输出f(n)
样例输入 Sample Input
【样例输入1】
0 1 1 1 20
【样例输入2】
0 1 -1 0 1000000000
【样例输入3】
-1 1 4 -3 18
样例输出 Sample Output
【样例输出1】
6765
【样例输出2】
-1
【样例输出3】
387420487
数据范围及提示 Data Size & Hint
见输入描述
分类标签 Tags
矩阵乘法 数论
/*
矩阵乘法.
斐波那契变式.
这样刷水题真的好吗...
注意是double
而且有一个很坑的数据...
*/
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
LL n;
double a1,b1,f0,f1,a[3][3],b[3][3],c[3][3],ans[3][3];
void mi()
{
while(n)
{
if(n&1)
{
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
c[i][j]=c[i][j]+ans[i][k]*b[k][j];
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
ans[i][j]=c[i][j],c[i][j]=0.0;
}
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
c[i][j]=c[i][j]+b[i][k]*b[k][j];
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
b[i][j]=c[i][j],c[i][j]=0.0;
n>>=1;
}
}
void slove()
{
ans[1][1]=f1,ans[1][2]=f0;
b[1][1]=a1,b[2][1]=b1,b[1][2]=1;
mi();
int x=(int)ans[1][2];
cout<<x;
}
int main()
{
cin>>f0>>f1>>a1>>b1>>n;
if(f0==0.0&&f1==0.0) printf("0");
else slove();
return 0;
}
Codevs 1070 普通递归关系(矩阵乘法)的更多相关文章
- codevs 3332 数列 (矩阵乘法)
/* 裸地矩阵乘法 矩阵很好想的 1 1 0 0 0 1 1 0 0 */ #include<iostream> #include<cstring> #include<c ...
- codevs 1070 普通递归关系
1070 普通递归关系 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 考虑以下定义在非负整数n上的递归关系 f( ...
- Codevs 1482 路线统计(矩阵乘法)
1482 路线统计 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description N个节点的有向图, 求从start到finish刚好经过时 ...
- 矩阵乘法快速幂 codevs 1250 Fibonacci数列
codevs 1250 Fibonacci数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 定义:f0=f1=1 ...
- Codevs No.3147 矩阵乘法2
2016-06-01 17:33:30 题目链接: 矩阵乘法2 (Codevs No.3147) 题目大意: 给定两个大小相同的正方形矩阵A,B.多次询问,每次求乘后矩阵的一个子矩阵所有元素的和. 解 ...
- Codevs No.1287 矩阵乘法
2016-06-01 16:53:23 题目链接: 矩阵乘法 (Codevs No.1287) 题目大意: 给你两个可乘矩阵a,b,求a*b 解法: 定义....... //矩阵乘法 (Codevs ...
- [codevs 1482]路线统计(矩阵乘法)
题目:http://codevs.cn/problem/1482/ 分析:很像“经过K条边的最短路径条数”.但有所不同,那就是不是边数固定,而是路径总长度固定.看似不能用矩阵乘法了……但注意到每条边的 ...
- 矩阵乘法 codevs 1287 矩阵乘法
1287 矩阵乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象 ...
- Codevs 1287 矩阵乘法&&Noi.cn 09:矩阵乘法(矩阵乘法练手题)
1287 矩阵乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 小明最近在为线性代数而头疼, ...
随机推荐
- microk8s 搭建
一.简述 microk8s不通过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes.通过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的所有上游二进制文件来 ...
- python模块之openpyxl
这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取Excel文件 需要导入相关函数. from open ...
- Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态
原文:Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题.位置.尺寸.最小化.可见性等各种状态 在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWi ...
- chocolatey install curl and netcat
chocolatey install curl and netcat 软件仓库 https://chocolatey.org/packages choco install curl choco ins ...
- ChipGenius 识别U盘主控信息
ChipGenius 识别U盘主控信息 ================== End
- Postman请求后台报错:Invalid character found in method name. HTTP method names must be tokens
在使用Postman请求后台时Postman出现 开发工具控制台报 信息: Error parsing HTTP request header Note: further occurrences of ...
- 一个时间O(n)的洗牌算法
//一种O(n)的洗牌算法 vector<int> randNUms(vector<int> &nums, int m) { int len = nums.size() ...
- wireshark语法小结
https://blog.csdn.net/cumirror/article/details/7054496 过滤重传包 https://blog.csdn.net/Joseph_ChiRunning ...
- Oracle 多表插入
多表插入 作用:一条INSERT语句可以完成向多张表的插入任务(Multitable insert).有两种形式:insert all与insert first,准备测试环境:1.创建表T并初始化测试 ...
- TFTP启动内核、设备树,NFS启动FS
一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E6321. 二.问题 ...