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 ...
随机推荐
- node web项目结构
- nginx压力测试webbench
下载压力测试工具webbench wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz 安装依赖包 yum -y in ...
- 进程互斥软件实现之Dekker算法
一. 为什么需要互斥? 大多数系统允许多个进程共享资源(如CPU,IO设备,硬盘等), 为了保证进程间能够互不影响.安全正确地访问这些共享资源, 就必须对进程访问共享资源采取互斥控制. 进程互斥原则: ...
- C++ 类设计核查表
参考:https://www.jianshu.com/p/01601515ca31 <大规模C++程序设计> 函数接口: 1.运算符或非运算符函数? 2.自由或成员运算符? 3.虚函数或非 ...
- poj 2774 字符串哈希求最长公共子串
Long Long Message #include <iostream> #include <algorithm> #include <cstdio> #incl ...
- DSP using MATLAB》Problem 8.16
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- [自学]数据库ER图基础概念整理(转)
ER图分为实体.属性.关系三个核心部分.实体是长方形体现,而属性则是椭圆形,关系为菱形. ER图的实体(entity)即数据模型中的数据对象,例如人.学生.音乐都可以作为一个数据对象,用长方体来表示, ...
- linux 备份最近一天的文件
#!/bin/bash #备份在最近一天修改的文件 #date 获取日期 +%Y-%m-%d 设置日期格式为yyyy-mm-dd的形式 BACKFILE=backup-$(date +%Y-%m-%d ...
- charles-过滤网络请求方法
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字.例如我们的服务器的地址是:https://www.baidu.com , 那么只需要在 Filter 栏中填入 https://w ...
- C++【vector】用法和例子
/*** * vector 基础api复习 * 8 AUG 2018 */ #include <iostream> #include <vector> using namesp ...