bzoj 3231: [Sdoi2008]递归数列【矩阵乘法】
今天真是莫名石乐志
一眼矩阵乘法,但是这个矩阵的建立还是挺有意思的,就是把sum再开一列,建成大概这样

然后记!得!开!long!long!!
#include<iostream>
#include<cstdio>
using namespace std;
const int N=20;
long long n,b[N],c[N],sum,l,r,mod;
struct jz
{
long long a[N][N];
jz operator * (const jz &b) const
{
jz c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
c.a[i][j]=0;
for(int k=1;k<=n;k++)
c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j]%mod)%mod;
}
return c;
}
}y;
long long wk(long long x)
{
if(x<n)
{
long long r=0;
for(int i=1;i<=x;i++)
r=(r+b[i])%mod;
return r;
}
x-=n-1;
// cerr<<endl<<x<<endl;
jz a=y,r;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
r.a[i][j]=i==j;
while(x)
{
if(x&1)
r=r*a;
a=a*a;
x>>=1;
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// cerr<<r.a[i][j]<<" ";
// cerr<<endl;
// }
long long ans=r.a[1][1]*sum%mod;
for(int i=2;i<=n;i++)
ans=(ans+r.a[1][i]*b[n-i+1]%mod)%mod;
return ans;
}
int main()
{
scanf("%lld",&n);
n++;
for(int i=1;i<n;i++)
scanf("%lld",&b[i]);
for(int i=1;i<n;i++)
scanf("%lld",&c[i]);
for(int i=2;i<=n;i++)
y.a[1][i]=y.a[2][i]=c[i-1];
y.a[1][1]=1;
for(int i=3;i<=n;i++)
y.a[i][i-1]=1;
scanf("%lld%lld%lld",&l,&r,&mod);
for(int i=1;i<n;i++)
sum=(sum+b[i])%mod;
// for(int i=1;i<=10;i++)
// cerr<<wk(i)<<endl;
printf("%lld\n",(wk(r)-wk(l-1)+mod)%mod);
return 0;
}
bzoj 3231: [Sdoi2008]递归数列【矩阵乘法】的更多相关文章
- bzoj 3231 [Sdoi2008]递归数列——矩阵乘法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 矩阵乘法裸题. 1018是10^18.别忘了开long long. #include& ...
- BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )
矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...
- BZOJ 3231: [Sdoi2008]递归数列 (JZYZOJ 1353) 矩阵快速幂
http://www.lydsy.com/JudgeOnline/problem.php?id=3231 和斐波那契一个道理在最后加一个求和即可 #include<cstdio> #i ...
- [bzoj3231][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 ...
- [luogu2461 SDOI2008] 递归数列 (矩阵乘法)
传送门 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai- ...
- P2461 [SDOI2008]递归数列 矩阵乘法+构造
还好$QwQ$ 思路:矩阵快速幂 提交:1次 题解: 如图: 注意$n,m$如果小于$k$就不要快速幂了,直接算就行... #include<cstdio> #include<ios ...
- bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 裸矩阵乘法. 代码如下: #include<iostream> #incl ...
- BZOJ:3231: [Sdoi2008]递归数列
题解: 矩阵乘法,在矩阵中构造当前前缀和: 注意:for(int/long long ;;); #include<iostream> #include<cstdio> #inc ...
随机推荐
- 阿里云ubuntu服务器安装使用mysql并配置远程连接记录
实践2要继续做实践1的项目 项目在本地使用本地数据库对于团队开发来说太麻烦了 所以改把项目放在服务器上使用服务器数据库 进入主题 0.参考:https://www.cnblogs.com/ywf520 ...
- java项目连接access数据库
1.导入Access_JDBC30.jar到项目中 jar包百度云链接:https://pan.baidu.com/s/10HFM3HomMArvfHjklA_1MA 密码:0qxp 项目名称-> ...
- 九度oj 题目1057:众数
题目1057:众数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:9744 解决:3263 题目描述: 输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数, ...
- MySQL-Transfer2.2发布
http://dinglin.iteye.com/blog/1888640 Transfer 2.2发布.下载地址 版本说明 1. 基于版本 Percona-5.5.31 ,简单用法是先安装好官方或 ...
- 3.2 符号表之二叉查找树BST
一.插入和查找 1.二叉查找树(Binary Search Tree)是一棵二叉树,并且每个结点都含有一个Comparable的键,保证每个结点的键都大于其左子树中任意结点的键而小于其右子树的任意结点 ...
- **PHP分步表单提交思路(分页表单提交)
Q: 我用php做了3张表单 分布在3个页面 想在最后一页 再插入数据库 并且:在插入数据库之前 3个页面 后退 前进 表单的内容会被保留 以便随时更改能实现吗?想过session 感觉内容太多 给服 ...
- [bzoj4281][ONTAK2015]Związek Harcerstwa Bajtockiego_倍增LCA
Związek Harcerstwa Bajtockiego bzoj-4281 ONTAK-2015 题目大意:给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点.之后你将依次收到k ...
- 洛谷——P1164 小A点菜
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- hdu5618(cdq分治求三维偏序)
题意:给n(n<=100000)个点,坐标为(xi,yi,zi)(1<=xi,yi,zi<=100000),定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB, ...
- 洛谷 P3456 [POI2007]GRZ-Ridges and Valleys
P3456 [POI2007]GRZ-Ridges and Valleys 题意翻译 给定一个地图,为小朋友想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两 ...