nyoj--301--递推求值(经典矩阵运算)
递推求值
- 描述
-
给你一个递推公式:
f(x)=a*f(x-2)+b*f(x-1)+c
并给你f(1),f(2)的值,请求出f(n)的值,由于f(n)的值可能过大,求出f(n)对1000007取模后的值。
注意:-1对3取模后等于2
- 输入
- 第一行是一个整数T,表示测试数据的组数(T<=10000)
随后每行有六个整数,分别表示f(1),f(2),a,b,c,n的值。
其中0<=f(1),f(2)<100,-100<=a,b,c<=100,1<=n<=100000000 (10^9) - 输出
- 输出f(n)对1000007取模后的值
- 样例输入
-
2
1 1 1 1 0 5
1 1 -1 -10 -100 3 - 样例输出
-
5 999896
-
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
long long m,n,a,b,c,k;
long long mol=1000007;
long long x1,x2,x3;
long long y1,y2,y3;
long long z1,z2,z3;
void fun()
{
long long h=k;
if(h==1){printf("%d\n",m);return;}
if(h==2){printf("%d\n",n);return;}
long long r1=1,r2=0,r3=0;
long long s1=0,s2=1,s3=0;
long long t1=0,t2=0,t3=1;h-=2;
while(h>=1)
{
int o1,o2,o3,p1,p2,p3,q1,q2,q3;
if(h%2==1)
{
o1=(r1*x1+s1*x2+t1*x3)%mol;p1=(r1*y1+s1*y2+t1*y3)%mol;q1=(r1*z1+s1*z2+t1*z3)%mol;
o2=(r2*x1+s2*x2+t2*x3)%mol;p2=(r2*y1+s2*y2+t2*y3)%mol;q2=(r2*z1+s2*z2+t2*z3)%mol;
o3=(r3*x1+s3*x2+t3*x3)%mol;p3=(r3*y1+s3*y2+t3*y3)%mol;q3=(r3*z1+s3*z2+t3*z3)%mol;
r1=o1;r2=o2;r3=o3;s1=p1;s2=p2;s3=p3;t1=q1;t2=q2;t3=q3;
}
o1=(x1*x1+y1*x2+z1*x3)%mol;p1=(x1*y1+y1*y2+z1*y3)%mol;q1=(x1*z1+y1*z2+z1*z3)%mol;
o2=(x2*x1+y2*x2+z2*x3)%mol;p2=(x2*y1+y2*y2+z2*y3)%mol;q2=(x2*z1+y2*z2+z2*z3)%mol;
o3=(x3*x1+y3*x2+z3*x3)%mol;p3=(x3*y1+y3*y2+z3*y3)%mol;q3=(x3*z1+y3*z2+z3*z3)%mol;
x1=o1;x2=o2;x3=o3;y1=p1;y2=p2;y3=p3;z1=q1;z2=q2;z3=q3;
h/=2;
}
n=(m*r2+n*s2+t2)%mol;
n=(n+mol)%mol;
printf ("%d\n",n);
}
int main()
{
int N;
cin>>N;
while(N--)
{
// scanf("%d%d%d%d%d%d",&m,&n,&a,&b,&c,&k);
cin>>m>>n>>a>>b>>c>>k;
x1=0;y1=1;z1=0;
x2=a;y2=b;z2=c;
x3=0;y3=0;z3=1;
fun();
}
}
nyoj--301--递推求值(经典矩阵运算)的更多相关文章
- NYOJ——301递推求值(矩阵快速幂)
递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n)的 ...
- NYOJ 301 递推求值
第一次写博客,拿个矩阵快速幂练练手吧. 首先什么是快速幂,快速幂是让复杂度由线性降为log n的算法,比如8^1024次方暴力要算1024次,但是矩阵快速幂只算10次就好. 此题只不过是把快速幂的底数 ...
- NYOJ-301递推求值
递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f ...
- 算法笔记_091:蓝桥杯练习 递推求值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n- ...
- Java实现 蓝桥杯 算法提高 递推求值
算法提高 递推求值 时间限制:1.0s 内存限制:256.0MB 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) ...
- NYOJ301-递推求值
递推求值 nyoj上矩阵专题里的10道题水了AC率最高的5道,惭愧,还不是完全自己写的,用了几乎两周的时间.模板题我是有自信写出来的,但对于高级一点的矩阵构造,我还是菜的抠脚. 这题感谢MQL大哥和她 ...
- poj 3744 Scout YYF I(递推求期望)
poj 3744 Scout YYF I(递推求期望) 题链 题意:给出n个坑,一个人可能以p的概率一步一步地走,或者以1-p的概率跳过前面一步,问这个人安全通过的概率 解法: 递推式: 对于每个坑, ...
- poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3523 Accepted: 1740 ...
- nyoj 35-表达式求值(stack, 栈的应用)
35-表达式求值 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:37 submit:53 题目描述: ACM队的mdd想做一个计算器,但是,他要做的 ...
随机推荐
- 使用记事本开发第一个java程序
记事本是开发java程序最基础的一个工具 第一步:编写 新建一个文件名为Hello的文本文档,并将文件扩展名改为.java. 在文本框内输入我们的程序代码 ——————————————我是分割线——— ...
- 0x16 Trie
这章刷的真带劲 嘿嘿 裸题 #include<cstdio> #include<iostream> #include<cstring> #include<cs ...
- java 中的静态(static)代码块
类字面常量 final 静态域不会触发类的初始化操作 非 final static 静态域(以及构造器其实是一种隐式的静态方法) Class.forName():会自动的初始化: 使用 .class来 ...
- SQL 导出数据字典
用于参考: SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case w ...
- WINDOWS系统注册表(读、写)
读取注册表 写入注册表
- 开发辅助 | 前端开发工程师对 UI设计、交互设计的认知
1.UI 用户界面 UI:User Interfase 用户界面 UID:User Interfase Designer 用户界面设计师,多指移动 app 的界面设计: 2.一个合格的 UI 设计师, ...
- Tomcat配置自签名https
从JDK中找到keytool.exe,随便复制到一个方便的目录,在命令行中进入这个目录. 第一步:为服务器生成证书 tomcat.keystore,命令中如果是IP方式访问用-ext SAN=ip:1 ...
- Java 开源博客 —— Solo 0.6.9 发布了!
Solo 是 GitHub 上 Star 数最多的 Java 博客系统,今天我们发布了 0.6.9 正式版,欢迎大家下载. 特性 基于标签的文章分类 博客/标签 Atom/RSS.Sitemap 输出 ...
- ListView的Item动画
1.效果图 2.需求就是点击item歌曲时,实现一种飞入到预约按钮处的效果 3.思路:在布局文件中加入了一个条目布局,和listView的item一样,点击listView的item时,使用给条目布局 ...
- python包管理(distutils、easy_install、pip、setup.py/requirements.txt、wheel)
distutils.distutils2 distutils是 python 标准库的一部分,2000年发布.使用它能够进行 python 模块的 安装 和 发布. distutils2 被设计为 d ...