UVa 10870 (矩阵快速幂) Recurrences
给出一个d阶线性递推关系,求f(n) mod m的值。
,
求出An-dv0,该向量的最后一个元素就是所求。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = ; typedef long long Matrix[maxn][maxn];
typedef long long Vector[maxn]; int d, n, m; void matrix_mul(Matrix A, Matrix B, Matrix res)
{
Matrix C;
memset(C, , sizeof(C));
for(int i = ; i < d; i++)
for(int j = ; j < d; j++)
for(int k = ; k < d; k++)
C[i][j] = (C[i][j] + A[i][k]*B[k][j]) % m;
memcpy(res, C, sizeof(C));
} void matrix_pow(Matrix A, int n, Matrix res)
{
Matrix a, r;
memcpy(a, A, sizeof(a));
memset(r, , sizeof(r));
for(int i = ; i < d; i++) r[i][i] = ;
while(n)
{
if(n&) matrix_mul(r, a, r);
n >>= ;
matrix_mul(a, a, a);
}
memcpy(res, r, sizeof(r));
} int main()
{
//freopen("in.txt", "r", stdin); while(cin >> d >> n >> m && d)
{
Matrix A;
memset(A, , sizeof(A));
Vector a, f;
for(int i = ; i < d; i++) { cin >> a[i]; a[i] %= m; }
for(int i = ; i < d; i++) { cin >> f[i]; f[i] %= m; }
if(n <= d) { cout << f[n-] << "\n"; continue; }
for(int i = ; i < d-; i++) A[i][i+] = ;
for(int i = ; i < d; i++) A[d-][i] = a[d-i-];
matrix_pow(A, n-d, A);
long long ans = ;
for(int i = ; i < d; i++) ans = (ans + A[d-][i]*f[i]) % m;
cout << ans << "\n";
} return ;
}
代码君
UVa 10870 (矩阵快速幂) Recurrences的更多相关文章
- UVa 10870 & 矩阵快速幂
题意: 求一个递推式(不好怎么概括..)的函数的值. 即 f(n)=a1f(n-1)+a2f(n-2)+...+adf(n-d); SOL: 根据矩阵乘法的定义我们可以很容易地构造出矩阵,每次乘法即可 ...
- UVA - 11149 (矩阵快速幂+倍增法)
第一道矩阵快速幂的题:模板题: #include<stack> #include<queue> #include<cmath> #include<cstdio ...
- 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) 思路 ...
- 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 ...
- UVA10870—Recurrences(简单矩阵快速幂)
题目链接:https://vjudge.net/problem/UVA-10870 题目意思: 给出a1,a2,a3,a4,a5………………ad,然后算下面这个递推式子,简单的矩阵快速幂,裸题,但是第 ...
- UVA10870 Recurrences —— 矩阵快速幂
题目链接:https://vjudge.net/problem/UVA-10870 题意: 典型的矩阵快速幂的运用.比一般的斐波那契数推导式多了几项而已. 代码如下: #include <bit ...
随机推荐
- Android journey3 @点击事件的4种写法
对于android布局中的控件,如Button等会有相应的点击事件去响应它所需要的功能,今天我们就以电话拨号器的代码说明下几种点击事件: package com.itheima.phone; impo ...
- 2007: [Noi2010]海拔 - BZOJ
Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)× ...
- EXT--表单AJax提交后台,返回前端数据格式的转换
前言: 前端发送请求至服务端(Java),得到的数据是Java语言对象所表现的形式,经常需要转换为JSON格式的字符串写出至前端:当前端获取后也往往需要将字符串转换为js的对象.本文描述了在EXT作为 ...
- Filter及FilterChain的使用详解(转)
一.Filter的介绍及使用 什么是过滤器? 与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序中.但是与其他web应用程序组件不同的是,过滤器是"链&quo ...
- Selenium如何使用自定义的Firefox配置文件?
一.自动保存文件 import os from selenium import webdriver fp = webdriver.FirefoxProfile() fp.set_preference( ...
- Codeforces 337D Book of evil
一道树形dp,写出来是因为最近也做了道类似的.这题是看了分析的思路才做出来的,但感觉很多这样的dp都是利用类似的性质.像这题的话distDown很好想,但distUp的时候就很难想了,其实只要抓住di ...
- [shell编程]一个简单的脚本
首先,为什么要学习shell呢?哈哈,当然不是shell能够怎样怎样然后100字. 最近看到一篇博文<开阔自己的视野,勇敢的接触新知识>,读完反思良久.常常感慨自己所会不多,对新知识又有畏 ...
- JsRender系列demo-对null 和boolen类型数据的探讨
废话不说了,直接上代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he ...
- javascript分享到的源码
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- DJANGO变动库的一次真实手动经历
在变更库时,由于对字段规划和约束性没考虑完全,需要手工操作数据库,以便可以重复执行. 有以下三点要注意. 1,先迎合错误输出,增删对应的表或字段. 2,必要时,修改migrations文件,以去除唯一 ...