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 ...
随机推荐
- conflunce安装配置
下载 下载Confluence-v5.4.4.zip包,其中包含 atlassian-confluence-5.4.4-x64.bin #程序二进制文件 confluence5.x-crack.z ...
- POJ-20407Relatives/NYOJ-333mdd的烦恼,欧拉函数简单应用,模板A
poj Relatives Time Limit: 1000MS Memory Li ...
- Big String(poj 2887)
题意: 给你一个不超过1e6的字符串,和不超过2000次的操作 操作分为两种: 1.将一个字符插入到某个位置的前面 2.询问当前位置的字符 /* 块状链表模板水题(我的智商也就能做这种题了). 观察题 ...
- 【ZJOI2017 Round1游记】
DAY0: 中午12点出发,下午5点到 酒店意外豪华 晚上和MG,LYY们定了个寿司套餐 没什么学习就睡觉了 DAY1: 听说RYZ在ZJ的OIer中影响颇深 讲STL的小哥真是对不住因为我是P党 D ...
- vue生成包报错error from UglifyJs
mangle: { keep_fnames: true},
- [bzoj3160]万径人踪灭_FFT_Manacher
万径人踪灭 bzoj-3160 题目大意:给定一个ab串.求所有的子序列满足:位置和字符都关于某条对称轴对称而且不连续. 注释:$1\le n\le 10^5$. 想法: 看了大爷的题解,OrzOrz ...
- Eclipse错误:Syntax error on tokens, delete these tokens问题解决
错误:Syntax error on tokens, delete these tokens 出现这样的错误一般是括号.中英文字符.中英文标点.代码前面的空格,尤其是复制粘贴的代码,去掉即可.
- MongoDB小结11 - update【save】
save是一个shell函数,调用它,可以在文档不存在时插入,存在时更新,它只有一个参数:文档.如果文档有 _id 这个 键,那么save会调用upsert,否则会调用insert,非常方便.
- 程序员之---C语言细节18(一些奇怪表达式)
主要内容:一些奇怪表达式 #include <stdio.h> #define N 10 int main() { int a = 1; int *q = &a; int p = ...
- PHP导入和导出CSV文件
CREATE TABLE `student` ( `id` ) NOT NULL auto_increment, `name` varchar() NOT NULL, `sex` varchar() ...