UVA 10870 - Recurrences(矩阵高速功率)
UVA 10870 - Recurrences
题意:f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), for n > d.
已知前d项求第n项
思路:矩阵高速幂,相应矩阵为
|a1 a2 a3 ... ad|
|1 0 0 ... 0 0 0|
|0 1 0 ... 0 0 0|
|0 0 1 ... 0 0 0|
|0 0 0 ... 0 0 0|
|0 0 0 ... 1 0 0|
|0 0 0 ... 0 1 0|
|0 0 0 ... 0 0 1|
代码:
#include <stdio.h>
#include <string.h> const int N = 20;
long long d, n, m, f[N]; struct mat {
long long n, v[N][N];
mat(long long n = 0) {
this->n = n;
memset(v, 0, sizeof(v));
}
mat operator * (mat b) {
mat ans = mat(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
ans.v[i][j] = ((ans.v[i][j] + v[i][k] * b.v[k][j] % m) % m + m) % m;
}
}
}
return ans;
}
}; mat pow_mod(mat a, long long k) {
mat ans(a.n);
for (int i = 0; i < ans.n; i++)
ans.v[i][i] = 1;
while (k) {
if (k&1) ans = ans * a;
a = a * a;
k >>= 1;
}
return ans;
} int main() {
while (~scanf("%lld%lld%lld", &d, &n, &m) && d) {
mat a = mat(d);
for (int i = 0; i < d; i++)
scanf("%lld", &a.v[0][i]);
for (int i = 1; i < d; i++)
a.v[i][i - 1] = 1;
for (int i = 0; i < d; i++)
scanf("%lld", &f[i]);
if (n <= d) printf("%lld\n", f[n - 1]);
else {
long long ans = 0;
a = pow_mod(a, n - d);
for (int i = 0; i < d; i++)
ans = (ans + (f[d - i - 1] * a.v[0][i] % m + m)) % m;
printf("%lld\n", ans);
}
}
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) .. ... 
- [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)
		Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9613 Accepted: 2 ... 
- hdu 2243 考研绝望——复杂的文字(AC自己主动机+矩阵高速功率)
		pid=2243" target="_blank" style="">题目链接:hdu 2243 考研路茫茫--单词情结 题目大意:略. 解题思 ... 
- poj 3744 Scout YYF I (可能性DP+矩阵高速功率)
		Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5062 Accepted: 1370 Description YYF i ... 
- POJ 3070 Fibonacci(矩阵高速功率)
		职务地址:POJ 3070 用这个题学会了用矩阵高速幂来高速求斐波那契数. 依据上个公式可知,第1行第2列和第2行第1列的数都是第n个斐波那契数.所以构造矩阵.求高速幂就可以. 代码例如以下: #in ... 
- HDU 2842 Chinese Rings(矩阵高速功率+递归)
		职务地址:HDU 2842 这个游戏是一个九连环的游戏. 如果当前要卸下前n个环.由于要满足前n-2个都卸下,所以要先把前n-2个卸下.须要f(n-2)次.然后把第n个卸下须要1次,然后这时候要卸下第 ... 
- UVA 10870 Recurrences(矩阵乘法)
		题意 求解递推式 \(f(n)=a_1*f(n-1)+a_2*f(n-2)+....+a_d*f(n-d)\) 的第 \(n\) 项模以 \(m\). \(1 \leq n \leq 2^{31}-1 ... 
- UVA - 10870 Recurrences  【矩阵快速幂】
		题目链接 https://odzkskevi.qnssl.com/d474b5dd1cebae1d617e6c48f5aca598?v=1524578553 题意 给出一个表达式 算法 f(n) 思路 ... 
- 矩阵快速幂 UVA 10870 Recurrences
		题目传送门 题意:f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n − d), for n > d,求f (n) % m.训 ... 
随机推荐
- 【原创翻译】认识MVC设计模式:web应用开发的基础(实际编码篇)
			原文地址:http://www.larryullman.com/2009/10/15/understanding-mvc-part-3/ 全系列INDEX [原创翻译]认识MVC设计模式:web应用开 ... 
- [LeetCode]Palindrome Partitioning 找出所有可能的组合回文
			给定一个字符串,切割字符串,这样每个子字符串是一个回文字符串. 要找出所有可能的组合. 办法:暴力搜索+回溯 class Solution { public: int *b,n; vector< ... 
- 超赞的.NET办公软件库
			之前做项目无意中搜到这个站点,一開始以为是国外大牛们的杰作,然后看到联系地址中竟然是四川成都,喔...咱们中国人跟老美.印度人比起来也非常厉害啊. 这个站点一次性提供了word.excel.ppt.p ... 
- POJ2239 Selecting Courses【二部图最大匹配】
			主题链接: http://poj.org/problem?id=2239 题目大意: 学校总共同拥有N门课程,而且学校规定每天上12节可,一周上7天. 给你每门课每周上的次数,和哪一天哪一节 课上的. ... 
- 3g自己主动更新网卡驱动web完架构文档
			几年前写. 看它是否是用得上 1 简单介绍 本文档具体描写叙述了基于ASP.NET平台和IIS服务的T-Mobile自己主动更新系统的实现框架. 本文档主要从技术架构和业务架构两个方面来着手来描写叙 ... 
- sql二进制数据权限
			(3为权限组合值,结果为1=列表 2=新建 4=修改 8=删除) select 3 & 1 select 3 & 2 select 3 & 4 select 3 & 2 ... 
- StringUtils.isNumeric(String str) 的一个坑(转)
			在项目中遇到一处bug,调试的结果竟然是StringUtils.isNumeric(String str) 在捣鬼(采用的是org.apache.commons.lang.StringUtils),下 ... 
- 对ESB概念的理解(转)
			http://www.ibm.com/developerworks/cn/webservices/0811_magy_esb/ 什么是 ESB?ESB 严格来说不是某一个产品,而是一种框架,设计模式. ... 
- Java的λ表达(lambda)
			λ表达的基本目的 回调Java8的λ表达式 说明了Java8的λ表达式的基本用途:完毕了回调的原意--代码的參数化. 回调:能够简单地说,假设你的方法须要override底层或JDK的某个类的方法,并 ... 
- MonkeyRunner源代码分析Android通信设备
			正如前面<谁动了我的截图?--Monkeyrunner takeSnapshot方法源代码跟踪分析>所述,本文主要会尝试描写叙述android的自己主动化測试框架MonkeyRunner到 ... 
