bzoj 3231 [Sdoi2008]递归数列——矩阵乘法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231
矩阵乘法裸题。
1018是10^18。别忘了开long long。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=;
int n;
ll L,R,b[N],c[N],mod,s[N],prn;
struct Matrix{
ll a[N][N];
Matrix(){memset(a,,sizeof a);}
void init()
{
for(int i=;i<n;i++)a[i][]=c[i];
for(int i=;i<n;i++)a[i-][i]=;
a[][n]=a[n][n]=;
}
Matrix operator* (const Matrix &b)const
{
Matrix c;
for(int i=;i<=n;i++)
for(int k=;k<=n;k++)
for(int j=;j<=n;j++)
(c.a[i][j]+=a[i][k]*b.a[k][j])%=mod;
return c;
}
}ans,r,yans,yr;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&b[i]);
s[i]=s[i-]+b[i];
ans.a[][n-i+]=b[i];
}
ans.a[][n+]=s[n-];
yans=ans;
for(int i=;i<=n;i++)scanf("%lld",&c[i]);
scanf("%lld%lld%lld",&L,&R,&mod);
n++;r.init();yr=r;
if(R<n)prn=s[R];
else
{
ll k=R-n+;
while(k)
{
if(k&)ans=ans*r;
r=r*r;k>>=1ll;
}
prn=(ans.a[][n]+ans.a[][])%mod;
}
if(L-<n)prn=((prn-s[L-])%mod+mod)%mod;
else
{
ll k=L--n+;
while(k)
{
if(k&)yans=yans*yr;
yr=yr*yr;k>>=1ll;
}
prn=((prn-yans.a[][n]-yans.a[][])%mod+mod)%mod;
}
printf("%lld\n",prn);
return ;
}
bzoj 3231 [Sdoi2008]递归数列——矩阵乘法的更多相关文章
- BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )
矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...
- bzoj 3231: [Sdoi2008]递归数列【矩阵乘法】
今天真是莫名石乐志 一眼矩阵乘法,但是这个矩阵的建立还是挺有意思的,就是把sum再开一列,建成大概这样 然后记!得!开!long!long!! #include<iostream> #in ...
- 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 ...
随机推荐
- 基于VGGnet的人脸识别系统-ubuntu 系统下的Caffe环境搭建(CPU)
对于caffe的系统一般使用linux系统,当然也有windows版本的caffe,不过如果你一开始使用了windows下面的caffe,后面学习的过程中,会经常遇到各种错误,网上下载的一些源码.模型 ...
- C++:多线程001
C++ 多线程 创建线程的API函数 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD:线程安全相关的属性,常置为N ...
- CentOS7配置Docker镜像加速器
1. 将默认的配置文件复制出来 cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service 2. 将加速器地 ...
- Nginx在windows系统的常用命令
启动 start nginx 强制停止 nginx.exe -s stop 重启 nginx.exe -s reload
- Django 补充知识
目录 Django基于配置文件的编程思想 初步实现 大佬实现 跨站请求伪造csrf 什么是csrf? 前端如何解决 ajax解决 csrf相关的装饰器 FBV方式装饰器 CVB方式装饰器 Django ...
- Android之divider分割线的使用
1.divider分割线 三种实现方式:(1)添加一个view,(2)通过shape实现,(3)通过设置图片实现 相关属性:设置分割线,分割线位置(none(无),begining(开始),end(结 ...
- Python学习day17-常用的一些模块
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- <随便写>佛祖,哈哈!
print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" ...
- 短URL系统、301/302重定向
短 URL 系统是怎么设计的?https://yq.aliyun.com/articles/87600 短网址(short URL)系统的原理及其实现 https://hufangyun.com/20 ...
- vue页面刷新数据丢失问题
参考: https://blog.csdn.net/aliven1/article/details/80743470 https://blog.csdn.net/liang37712 ...