【矩阵乘法】递推(ssl 1532)
递推
ssl 1532
题目大意
给出数列a0,a1…ana_0,a_1…a_na0,a1…an和fff的前n−1n-1n−1项f0,f1…fn−1f_0,f_1…f_{n-1}f0,f1…fn−1
fi=a0∗fi−n+a1∗fi−(n−1)+...+an−1∗fi−1+anf_i=a_0*f_{i-n}+a_1*f_{i-(n-1)}+...+a_{n-1}*f_{i-1}+a_nfi=a0∗fi−n+a1∗fi−(n−1)+...+an−1∗fi−1+an
现在让你求fkf_kfk(结果对9973取模)
输入样例
2 10
1 1 0
0 1
输出样例
55
数据范围
1⩽n⩽k⩽10181⩽ai,fi⩽1041\leqslant n\leqslant k\leqslant10^{18}\\1\leqslant a_i,fi\leqslant10^41⩽n⩽k⩽10181⩽ai,fi⩽104
解题思路
k较大,无法直接递推,我们考虑矩阵乘法
设矩阵
[fi−nfi−(n−1)…fi−11]\begin{bmatrix} f_{i-n} &f_{i-(n-1)} & … & f_{i-1} & 1 \end{bmatrix}[fi−nfi−(n−1)…fi−11]
fi−n−fi−2f_{i-n}-f_{i-2}fi−n−fi−2直接等于下一位
fi−1f_{i-1}fi−1就是前面n项乘对应的a,然后加上最后一个1乘ana_nan
1不变
得出需要乘的矩阵后快速幂即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define wyc 9973
ll n, k;
struct matrix
{ll n, m, a[100][100];matrix operator *(matrix const &b)const{matrix c;c.n = n;c.m = b.m;for (int i = 1; i <= c.n; ++i)for (int j = 1; j <= c.m; ++j)c.a[i][j] = 0;for (int i = 1; i <= c.n; ++i)for (int k = 1; k <= m; ++k)for (int j = 1; j <= c.m; ++j)c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j] % wyc) % wyc;return c;}
}A, B;
void Counting(ll g)
{while(g){if (g&1) A = A * B;B = B * B;g>>=1;}
}
int main()
{scanf("%lld%lld", &n, &k);B.n = B.m = A.m = n + 1;A.n = 1;for (int i = 1; i <= n + 1; ++i){scanf("%lld", &B.a[i][n]);//前n个数乘上对应的aif (i < n) B.a[i + 1][i] = 1;//等于下一个}B.a[n + 1][n + 1] = 1;//最后一个afor (int i = 1; i <= n; ++i)scanf("%lld", &A.a[1][i]);A.a[1][n + 1] = 1;Counting(k);printf("%lld", A.a[1][1]);return 0;
}
【矩阵乘法】递推(ssl 1532)相关推荐
- 矩阵乘法递推的优化艺术
对于一个线性递推式,求它第项的值,通常的做法是先构造一个的矩阵,然后在时间内求出. 其实,由于这个矩阵的特殊性,可以将时间优化到.接下来我会以一个题目来讲解矩阵乘法递推的优化. 题目:http://w ...
- VINS-Mono之IMU预积分,预积分误差、协方差及误差对状态量雅克比矩阵的递推方程的推导
文章目录 1. 前言 2. IMU模型 3. 基于世界坐标系下的IMU运动模型 3.1 连续形式下的IMU运动模型 3.2 离散形式下的IMU运动模型 3.2.1 欧拉法离散形式 3.2.2 中值法离 ...
- 基于遗忘因子递推最小二乘法辨识一阶RC等效电路模型
%% 基于一阶RC等效电路模型实现不同倍率下电模型参数辨识 clear clc%% 载入实验数据 % 导入hppc实验数据 load('hppc_pulse_25deg') temp = hppc_p ...
- 2019.08.20【NOIP提高组】模拟 B 组 排序、DP+递推、矩阵乘法+数位DP/类欧
文章目录 0 旅游(travel) 1 做梦(dream) 2 数数(count) 初见时,她说,"我无力自保,无处可去,无人可依." 多年后,他说,"我教你射箭,你已有 ...
- 浅谈斐波那契数列——从递推到矩阵乘法
说在前面 相信大家都已经知道这个中外著名的费波纳切数列了吧,关于费波那契数列有很多有趣的性质,但我们这里不讲,在这里我们只是利用斐波那契数列来引出另一个神奇的东西,矩阵乘法,递推在这里是起一个对比与铺 ...
- 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解
传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...
- NYOJ 301 递推求值(矩阵快速幂)
递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...
- 矩阵快速幂递推(五行)
矩阵快速幂 第一次写博客,想着写哪个知识点呢..来想着还是写我第一个理解了的并且在比赛中成功写出来的(orz)矩阵快速幂. 快速幂 首先快速幂先来复习一下 所谓快速幂,就是加快幂运算的算法. 主要公式 ...
- HDU 6185 Covering 矩阵快速幂 递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...
最新文章
- (0103)iOS开发之Xcode 10 Error:Multiple commands produce问题及解决方案
- 多路归并排序_1600W整数排序多路归并
- 运用RUP 4+1视图方法进行软件架构设计
- java interface 不能存常量数组?
- 如何打开手机端口_微信接收图纸dwg怎么打开?如何手机查看CAD图纸,三步免费教你...
- Tomcat-部署多个项目(不同端口)
- C和指针之学习笔记(3)
- 测试用例编写注意事项
- 由浅入深|让你彻底理解Python中的yield
- linux下的shell和脚本
- 工具 - 怎么看微信h5的源码?
- UNP Chapter 25 - 原始套接口
- MarkdownPad2
- orcad元件封装制作
- 【汉化】nitrosdk。。。这个。。。天朝V5
- 秃头程序员保姆教程:Spring框架自学之路(一)
- JAVA 清理垃圾文件简单实现
- 蓝桥杯单片机之PCF8591模块的使用
- 微信电脑端双击不能放大图片怎么回事_IOS 微信 聊天双击放大图片操作
- win7无线热点_电脑小技巧电脑做无线热点
热门文章
- Java图形 图像与多媒体基础,十一. 图形、图像与多媒体1.绘图基础
- mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句
- python程序启动其他python程序,如何使用Python启动应用程序的实例?
- [PAT乙级]1042 字符统计
- [Java网络编程基础]TCP发送和接收数据
- [蓝桥杯2018初赛]星期一-日期计算
- Pycharm安装第三方库
- Stack(栈 c++模版实现)
- SQL10 用where过滤空值练习
- 滑动窗口最大值-leetcode 239题