题解:

矩阵乘法,在矩阵中构造当前前缀和;

注意:for(int/long long ;;);

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long Lint; Lint n,m;
int k,p;
int b[200];
int c[200];
Lint tmp1,tmp2;
Lint sum;
int minit(){
tmp1=tmp2=sum=0;
} struct Matrix{
Lint e[200][200];
Matrix(){
memset(e,0,sizeof(e));
}
int clear(){
memset(e,0,sizeof(e));
}
}t,x,y,z,ret; int Mul(){
z.clear();
for(int i=0;i<=k;++i){
for(int j=0;j<=k;++j){
for(int r=0;r<=k;++r){
z.e[i][j]=(z.e[i][j]+x.e[i][r]*y.e[r][j])%p;
}
}
}
} int Ksm(Lint p){
ret.clear();
for(int i=0;i<=k;++i)ret.e[i][i]=1;
while(p){
if(p<0)return 0;
if(p&1){
x=ret;y=t;Mul();
ret=z;
}
p>>=1;
x=t;y=t;Mul();
t=z;
}
} int main(){
minit(); scanf("%d",&k);
for(int i=1;i<=k;++i)scanf("%d",&b[i]);
for(int i=1;i<=k;++i)scanf("%d",&c[i]);
scanf("%lld%lld%d",&n,&m,&p);
for(int i=1;i<=k;++i)sum=(sum+b[i])%p; if(m<=k){
for(int i=n;i<=m;++i)tmp1=(tmp1+b[i])%p;
printf("%lld\n",tmp1);
return 0;
}else{ for(Lint i=n;i<=k;++i)tmp2=(tmp2+b[i])%p;
n=max(n,k+1LL); for(int i=1;i<=k;++i)t.e[1][i]=t.e[0][i]=c[i];
for(int i=2;i<=k;++i)t.e[i][i-1]=1;
t.e[0][0]=1;
Ksm(n-k-1); for(int i=1;i<=k;++i){
tmp1=(tmp1+ret.e[0][i]*b[k-i+1])%p;
}
tmp1=(tmp1+sum*ret.e[0][0])%p; t.clear();
for(int i=1;i<=k;++i)t.e[1][i]=t.e[0][i]=c[i];
for(int i=2;i<=k;++i)t.e[i][i-1]=1;
t.e[0][0]=1;
Ksm(m-k); for(int i=1;i<=k;++i)tmp2=(tmp2+ret.e[0][i]*b[k-i+1]%p)%p;
tmp2=(tmp2+sum*ret.e[0][0])%p; printf("%lld\n",(tmp2-tmp1+p)%p);
return 0;
}
}

  

BZOJ:3231: [Sdoi2008]递归数列的更多相关文章

  1. BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )

    矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...

  2. BZOJ 3231: [Sdoi2008]递归数列 (JZYZOJ 1353) 矩阵快速幂

    http://www.lydsy.com/JudgeOnline/problem.php?id=3231   和斐波那契一个道理在最后加一个求和即可 #include<cstdio> #i ...

  3. bzoj 3231 [Sdoi2008]递归数列——矩阵乘法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 矩阵乘法裸题. 1018是10^18.别忘了开long long. #include& ...

  4. bzoj 3231: [Sdoi2008]递归数列【矩阵乘法】

    今天真是莫名石乐志 一眼矩阵乘法,但是这个矩阵的建立还是挺有意思的,就是把sum再开一列,建成大概这样 然后记!得!开!long!long!! #include<iostream> #in ...

  5. BZOJ3231: [Sdoi2008]递归数列

    BZOJ3231: [Sdoi2008]递归数列 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + ...

  6. BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法

    BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1a ...

  7. 开始玩矩阵了!先来一道入门题![SDOI2008]递归数列

    [SDOI2008]递归数列 题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + c ...

  8. P2461 [SDOI2008]递归数列

    题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj 和 cj ...

  9. [bzoj3231][SDOI2008]递归数列——矩阵乘法

    题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...

随机推荐

  1. angularJs-服务调用与后台数据获取

    可以用factory做一些后台数据的获取,例如 happyFarm.factory('seedList',['$http',function($http){    return {        ge ...

  2. jmeter断言之响应code:200

    因为Jmeter只要检测到网页的响应,就认为是Pass而并不管当前网页内容的正确性.在进行压力测试时,为了检查Web服务器返回的网页是否正确,我们可以设置断言,这些断言是验证网页上是否存在指定的Tex ...

  3. 数据库建表并返回给前端 - (mysql-thinkphp) (3)

    1.先建一个表,你可以用mysql代码建,也可以用thinkphp建,也可以视图建,我用不到太复杂的,就用视图建了. 2.配置id为自增,唯一的值,不可重复.主键.要输入中文的选择utf8_gener ...

  4. Java数组去重的方法

    //第一种方式:最开始想到的是利用Set集合的不可重复性进行元素过滤 public static Object[] oneClear(Object[] arr){  Set set = new Has ...

  5. Mozilla Firefox 68 正式发布下载:对刚Chrome

    Mozilla Firefox 68开源和跨平台Web浏览器现在正式发布,可以下载适用于GNU/Linux,Mac和Windows平台的Firefox 68了. Firefox 68网络浏览器现在可以 ...

  6. DB2常用sql语句

    转 DB2 提供了关连式资料库的查询语言sql(structured query language),是一种非常口语化.既易学又易懂的语法.此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操 ...

  7. HTML速写

    1. E 代表HTML标签. 2. E#id 代表id属性. 3. E.class 代表class属性. 4. E[attr=foo] 代表某一个特定属性. 5. E{foo} 代表标签包含的内容是f ...

  8. 123.ModelForm的使用

    ModelForm 在我们的实例中,需要通过models.py中定义相关的模型字段,之后在forms.py中同样需要定义每个字段进行相应的验证,这样的话,我们会需要重复定义,这样的话,就相对比较麻烦, ...

  9. eshop-环境配置

    1. iptables # Generated by iptables-save v1. :: #*filter #:INPUT ACCEPT [:] #:FORWARD ACCEPT [:] #:O ...

  10. php中date('Y/m/d',time())显示不对

    一. 时间不对是因为没设置时区 在xampp/php/php.ini中ctrl + f 查找date.timezone 该行默认注释,去掉 ; 修改为 date.timezone = PRC 二 上述 ...