矩阵快速幂 UVA 10870 Recurrences
题意:f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n − d), for n > d,求f (n) % m。训练指南的题目
分析:令:,
.则
#include <bits/stdc++.h> int d, n, m;
int a[16], f[16]; struct Mat {
int m[17][17];
int row, col;
Mat() {
//row = col = 16;
memset (m, 0, sizeof (m));
}
void init(int sz) {
row = col = sz;
for (int i=1; i<row; ++i) {
m[i][i+1] = 1;
}
int c = sz - 1;
for (int i=2; i<=col; ++i) {
m[sz][i] = a[c--];
}
}
void change(int sz) {
row = col = sz;
for (int i=1; i<=sz; ++i) {
m[i][i] = 1;
}
}
}; Mat operator * (const Mat &a, const Mat &b) {
Mat ret;
ret.row = a.row; ret.col = b.col;
for (int i=1; i<=a.row; ++i) {
for (int j=1; j<=b.col; ++j) {
for (int k=1; k<=a.col; ++k) {
int &r = ret.m[i][j];
r = (r + 1ll * a.m[i][k] * b.m[k][j]) % m;
}
}
}
return ret;
} Mat operator ^ (Mat x, int n) {
Mat ret; ret.change (d+1);
while (n) {
if (n & 1) {
ret = ret * x;
}
x = x * x; n >>= 1;
}
return ret;
} //Running_Time
int main() {
while (scanf ("%d%d%d", &d, &n, &m) == 3) {
if (!d && !n && !m) {
break;
}
for (int i=1; i<=d; ++i) {
scanf ("%d", a+i);
}
for (int i=1; i<=d; ++i) {
scanf ("%d", f+i);
}
if (n <= d) {
printf ("%d\n", f[n] % m);
} else {
Mat ans, Fd;
ans.init (d + 1);
ans = ans ^ (n - d); Fd.row = d + 1; Fd.col = 1;
for (int i=2; i<=d+1; ++i) {
Fd.m[i][1] = f[i-1];
} ans = ans * Fd;
printf ("%d\n", ans.m[d+1][1]);
}
} return 0;
}
矩阵快速幂 UVA 10870 Recurrences的更多相关文章
- UVa 10870 Recurrences (矩阵快速幂)
题意:给定 d , n , m (1<=d<=15,1<=n<=2^31-1,1<=m<=46340).a1 , a2 ..... ad.f(1), f(2) .. ...
- UVA - 10870 Recurrences 【矩阵快速幂】
题目链接 https://odzkskevi.qnssl.com/d474b5dd1cebae1d617e6c48f5aca598?v=1524578553 题意 给出一个表达式 算法 f(n) 思路 ...
- UVA 10870 - Recurrences(矩阵高速功率)
UVA 10870 - Recurrences 题目链接 题意:f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), ...
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】
典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...
- uva 10518 - How Many Calls?(矩阵快速幂)
题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...
- Tribonacci UVA - 12470 (简单的斐波拉契数列)(矩阵快速幂)
题意:a1=0;a2=1;a3=2; a(n)=a(n-1)+a(n-2)+a(n-3); 求a(n) 思路:矩阵快速幂 #include<cstdio> #include<cst ...
- UVA - 11149 (矩阵快速幂+倍增法)
第一道矩阵快速幂的题:模板题: #include<stack> #include<queue> #include<cmath> #include<cstdio ...
- UVA10870—Recurrences(简单矩阵快速幂)
题目链接:https://vjudge.net/problem/UVA-10870 题目意思: 给出a1,a2,a3,a4,a5………………ad,然后算下面这个递推式子,简单的矩阵快速幂,裸题,但是第 ...
- UVA10870 Recurrences —— 矩阵快速幂
题目链接:https://vjudge.net/problem/UVA-10870 题意: 典型的矩阵快速幂的运用.比一般的斐波那契数推导式多了几项而已. 代码如下: #include <bit ...
随机推荐
- Java发送邮件初窥
一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 ...
- 浅析 - 提高xib(Interface Builder)高效工作的几个小技巧
本文译自:8 Tips for working effectively with Interface Builder(需FQ)先来看看目录:介绍使view的Size与view中的Content相适应按 ...
- monkey测试
一.理解monkey测试 1.Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 2.当Mon ...
- SAE云平台上传图片和发送邮件
1.远程图片保存至Storage 其中public是Storage中的容器名,"目录1/目录2/"是容器下的路径 $file_content 是得到的文件数据 $s = new S ...
- Android屏幕旋转总结
转自:http://www.myexception.cn/operating-system/1452058.html 1. ProjectConifg.mk中定义宏MTK_LCM_PHYSICAL_R ...
- Delphi的属性Property
参考:http://www.cnblogs.com/edisonfeng/archive/2012/05/22/2513727.html 一.基本属性 TOnUserInfoShow = proced ...
- Pyqt QComboBox 省市区县联动效果
在Qt中, QComboBox方法窗口组件允许用户从列表清单中选择,在web中就是select标签,下拉选项. 省市区县的联动就是currentIndexChanged 获取当前的Index,通过这个 ...
- Power BI中的QA功能预览
微软在休斯敦的全球合作伙伴大会上发布了Power BI for Office 365,通过Excel和Office 365中的自服务式商业智能解决方案为信息工作者提供了数据分析以及可视化功能以帮助他们 ...
- css2
CSS 实现div宽度根据内容自适应 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- js判断手机端Android手机还是iPhone手机
/*判断当前设备是平板.安卓.苹果设备*/ <script type="text/javascript"> function fBrowserRedirect(){ v ...