【SDOI 2008】 递归数列
【题目链接】
【算法】
矩阵乘法优化递推
由于本博客不支持数学公式,所以不能将矩阵画出来,请谅解!
【代码】
#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】 递归数列的更多相关文章
- bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 裸矩阵乘法. 代码如下: #include<iostream> #incl ...
- BZOJ-3231 递归数列 矩阵连乘+快速幂
题不是很难,但是啊,人很傻啊...机子也很鬼畜啊... 3231: [Sdoi2008]递归数列 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 569 ...
- BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )
矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...
- BZOJ3231: [Sdoi2008]递归数列
BZOJ3231: [Sdoi2008]递归数列 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + ...
- BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法
BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1a ...
- 开始玩矩阵了!先来一道入门题![SDOI2008]递归数列
[SDOI2008]递归数列 题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + c ...
- P2461 [SDOI2008]递归数列
题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj 和 cj ...
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- SQL SERVER 2008递归
tab1 表结构: create tab1 ( id int primary key identity(1,1), parentid int not null, name varchar(25) ) ...
随机推荐
- [Python3网络爬虫开发实战] 1.7.2-mitmproxy的安装
mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump, ...
- 树莓派 -- i2c学习 续(1) DeviceTree Overlay实例化rtc
上文中讨论了通过sysfs来实例化i2c设备 (rtc ds3231) https://blog.csdn.net/feiwatson/article/details/81048616 本文继续看看如 ...
- 一个关于vue+mysql+express的全栈项目(二)------ 前端构建
一.使用vue-cli脚手架构建 <!-- 全局安装vue-cli --> npm install -g vue-cli <!-- 设置vue webpack模板 --> vu ...
- Altium designer中生成gerbera文件
在Altium designer中生成gerbera文件的方法有很多,不同版本,差异行不太大,正如下边链接地址里博主在10版本下的方法,在6.0版本长也是这样 http://blog.sina.com ...
- SQLSERVER DBCC命令大全
DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保 ...
- BNUOJ 9870 Contestants Division
Contestants Division Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALiv ...
- 编程数学(A-1)-(B-1)-一个数的负次方怎么算
一个数的负几次方就是这个数的几次方的倒数.当这个数是正整数时,也就是说一个数的负n次方就是这个数的n次方分之一.例如: 2的-2次方=2的2次方分之1=4分之13的-2次方=3的2次方分之1=9分之1 ...
- 全文搜索(A-3)-用户建模
用户模型可以分为静态模型.动态模型.混合推荐用户模型. 静态模型往往通过显式方式收集用户偏好信息: 动态模型通过隐式方式收集用户偏好信息: 基于内容的用户系统的推荐模型: 关键字匹配,空间向量模型 协 ...
- HDU 4941
Magical Forest Problem Description There is a forest can be seen as N * M grid. In this forest, ther ...
- 听dalao讲课 7.27
1.高斯消元&线性基 也就是打大暴力啊 所谓的高斯消元也就是加减消元嘛,我的意识流高斯消元是可以的,没听到HY神犇讲,LZHdalao讲得很好,其实就是\(O(n^3)\)的暴力,别的地方一直 ...