【题目链接】

点击打开链接

【算法】

矩阵乘法优化递推

由于本博客不支持数学公式,所以不能将矩阵画出来,请谅解!

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXK 18 struct Matrix
{
long long mat[MAXK][MAXK];
}; int i,k;
long long n,m,p,sum;
long long b[MAXK],c[MAXK]; template <typename T> inline void read(T &x)
{
long long f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x)
{
if (x < )
{
putchar('-');
x = -x;
}
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x)
{
write(x);
puts("");
} inline void multipy(Matrix &a,Matrix b)
{
int i,j,t;
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for (i = ; i <= k + ; i++)
{
for (j = ; j <= k + ; j++)
{
for (t = ; t <= k + ; t++)
{
ans.mat[i][j] = (ans.mat[i][j] + a.mat[i][t] * b.mat[t][j]) % p;
}
}
}
a = ans;
}
inline long long solve(long long n)
{
Matrix a,res;
int i,j;
long long ans = ;
memset(a.mat,,sizeof(a.mat));
for (i = ; i <= k + ; i++) a.mat[][i] = a.mat[][i] = c[i-];
for (i = ; i <= k + ; i++) a.mat[i][i-] = ;
a.mat[][] = ;
memset(res.mat,,sizeof(res.mat));
for (i = ; i <= k + ; i++) res.mat[i][i] = ;
while (n > )
{
if (n & ) multipy(res,a);
multipy(a,a);
n >>= ;
}
ans = sum;
for (i = ; i <= k + ; i++) ans = (ans + res.mat[][i] * b[k-i+]) % p;
return ans;
}
inline long long query(long long n)
{
int i;
long long ans = ;
if (n <= k)
{
for (i = ; i <= n; i++) ans = (ans + b[i]) % p;
return ans;
} else return solve(n-k);
} int main() { read(k);
for (i = ; i <= k; i++) read(b[i]);
for (i = ; i <= k; i++) read(c[i]);
read(m); read(n); read(p);
for (i = ; i <= k; i++) sum = (sum + b[i]) % p;
writeln((query(n) - query(m-) + p) % p); return ; }

【SDOI 2008】 递归数列的更多相关文章

  1. bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 裸矩阵乘法. 代码如下: #include<iostream> #incl ...

  2. BZOJ-3231 递归数列 矩阵连乘+快速幂

    题不是很难,但是啊,人很傻啊...机子也很鬼畜啊... 3231: [Sdoi2008]递归数列 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 569 ...

  3. BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )

    矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...

  4. BZOJ3231: [Sdoi2008]递归数列

    BZOJ3231: [Sdoi2008]递归数列 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + ...

  5. BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法

    BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1a ...

  6. 开始玩矩阵了!先来一道入门题![SDOI2008]递归数列

    [SDOI2008]递归数列 题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + c ...

  7. P2461 [SDOI2008]递归数列

    题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj 和 cj ...

  8. [bzoj3231][SDOI2008]递归数列——矩阵乘法

    题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...

  9. SQL SERVER 2008递归

    tab1 表结构: create tab1 ( id int primary key identity(1,1), parentid int not null, name varchar(25) ) ...

随机推荐

  1. jQuery对table排序

    <script> //col对应列,cmp两数比较方法,返回值为TRUE,FALSE function sort(col, cmp) { var table = $("#test ...

  2. vim使用学习

    1.1在正常模式下,使用h,j,k,l实现左,下,上,右移动. (如果不再正常模式下,使用Esc键进入正常模式) 1.2退出vim,先进入到正常模式,输入:q!退出,但不保存任何修改. 1.3在正常模 ...

  3. Python之目录结构

    Python之目录结构 项目名project_name project_name -|--bin (可执行文件) --|--start.py import os,sys #设置环境变量 BASE_DI ...

  4. 集训第四周(高效算法设计)G题 (贪心)

    G - 贪心 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Desc ...

  5. SQlServer中的MD5加密

    SELECT sys.fn_varbintohexstr(HASHBYTES('MD5', '我'));

  6. Discuz论坛广告横幅大图在百度app内无法显示,百度app默认开启了广告屏蔽

    问题由来 前段时间搭的一个Discuz论坛上挂了2个广告横幅,网站的话收录还不错,然后客户就反应百度app上无法看到横幅. 由于我没有下载百度app,看不到效果我将信将疑,因为电脑,手机浏览器都是ok ...

  7. 如何实现IIS 7.0对非HTTP协议的支持

    在<再谈IIS与ASP.NET管道>介绍各种版本的IIS的设计时,我们谈到IIS 7.0因引入WAS提供了对非HTTP协议的支持.这个对于WCF的服务寄宿来说意义重大,它意味着我们通过II ...

  8. [luoguP2885] [USACO07NOV]电话线Telephone Wire(DP + 贪心)

    传送门 真是诡异. 首先 O(n * 100 * 100) 三重循环 f[i][j] 表示到第 i 个柱子,高度是 j 的最小花费 f[i][j] = min(f[i - 1][k] + abs(k ...

  9. noip模拟赛 星空

    分析:非常神的一道题.迭代加深搜索+rand可以骗得20分.状压n的话只有24分,必须对问题进行一个转化. 在爆搜的过程中,可以利用差分来快速地对一个区间进行修改,把一般的差分改成异或型的差分: b[ ...

  10. 创建Django项目(六)——模板

    2013-08-07 22:42:30|           1.设置模板路径         打开 settings.py 文件,修改 TEMPLATE_DIRS 内容,指向模板存放的绝对路径,而不 ...