BZOJ3231: [Sdoi2008]递归数列
Description
Input
Output
Sample Input
1 1
1 1
2 10 1000003
Sample Output
HINT
对于100%的测试数据:
1<= k<=15
1 <= m <= n <= 1018
题解Here!
#include<iostream>
#include<algorithm>
#include<cstdio>
#define MAXN 20
using namespace std;
long long n,m,p,k;
long long b[MAXN],c[MAXN],sum[MAXN];
struct node{
long long val[MAXN][MAXN];
node(){
for(int i=0;i<=19;i++)
for(int j=0;j<=19;j++)
val[i][j]=0;
}
friend node operator *(node x,node y){
node ret;
for(int i=1;i<=k+1;i++)
for(int j=1;j<=k+1;j++){
ret.val[i][j]=0;
for(int l=1;l<=k+1;l++){
ret.val[i][j]+=x.val[i][l]*y.val[l][j]%p;
ret.val[i][j]%=p;
}
}
return ret;
}
friend node operator ^(node x,long long w){
node s;
for(int i=1;i<=k+1;i++)s.val[i][i]=1;
while(w){
if(w&1)s=s*x;
x=x*x;
w>>=1;
}
return s;
}
}a[3];
inline long long read(){
long long date=0,w=1;char c=0;
while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
return date*w;
}
long long solve(long long x,int id){
if(x<=k)return sum[x];
node ans;
for(int i=1;i<=k;i++)ans.val[1][i]=b[i];
ans.val[1][k+1]=sum[k];
ans=ans*(a[id]^(x-k));
return ans.val[1][k+1]%p;
}
void work(){
long long ans1=solve(n,1),ans2=solve(m-1,2);
printf("%lld\n",(ans1-ans2+p)%p);
}
void init(){
k=read();
sum[0]=0;
for(int i=1;i<=k;i++){
b[i]=read();
sum[i]=sum[i-1]+b[i];
}
for(int i=1;i<=k;i++)c[i]=read();
m=read();n=read();p=read();
a[1].val[k+1][k+1]=a[2].val[k+1][k+1]=1;
for(int i=1;i<k;i++)a[1].val[i+1][i]=a[2].val[i+1][i]=1;
for(int i=1;i<=k;i++)a[1].val[i][k]=a[1].val[i][k+1]=a[2].val[i][k]=a[2].val[i][k+1]=c[k-i+1];
}
int main(){
init();
work();
return 0;
}
BZOJ3231: [Sdoi2008]递归数列的更多相关文章
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- BZOJ-3231 [SDOI2008]递归数列
转成矩阵连乘后,矩阵快速幂加速解决. 一开始没把需要longlong的变量补全..而且没初始化2333 #include <cstdlib> #include <cstdio> ...
- BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )
矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...
- BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法
BZOJ_3231_[Sdoi2008]递归数列_矩阵乘法 Description 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1a ...
- 开始玩矩阵了!先来一道入门题![SDOI2008]递归数列
[SDOI2008]递归数列 题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + c ...
- 【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂
题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- P2461 [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- ...
- [SDOI2008]递归数列
嘟嘟嘟 裸的矩阵快速幂,构造一个\((k + 1) * (k + 1)\)的矩阵,把sum[n]也放到矩阵里面就行了. #include<cstdio> #include<iostr ...
随机推荐
- 数据结构自己实现——stack
#define StackSize 100 typedef char DataType; class stack { public: DataType data[StackSize]; int top ...
- Vue开发之路由进阶
1.路由组件传参 在一个页面中,需要根据路由获得参数,然后在页面进行逻辑处理,可以通过$route来获取相关参数 但是这样一来,页面组件与路由耦合太高,为了解耦,页面组件可以在更大程度上进行复用,可以 ...
- SD-WAN用户实践分享:老网工趟出的SD-WAN成功路
在这个离开“人大物云”(人-人工智能.大-大数据.物-物联网.云-云计算)话题都张不开嘴的年代,在这个在咖啡店谈生意都不好意思低于1个亿的年代,反思我的老本行——网络,正在以一种全新的.更加重要的姿态 ...
- TCP server和client
http://blog.csdn.net/hguisu/article/details/7445768/ 原文:http://www.cnblogs.com/dolphinX/p/3460545.ht ...
- 【UTR #2】题目交流通道
题目描述 定好了难度,雄心勃勃的吉米多出题斯基开始寻找智慧的神犇星球的居民出题. 然而吉米多出题斯基没有料到,神犇星球的居民告诉吉米多出题斯基:"今年神犇星球经济不景气,大家都想宅在家里,哪 ...
- 左偏树 / 非旋转treap学习笔记
背景 非旋转treap真的好久没有用过了... 左偏树由于之前学的时候没有写学习笔记, 学得也并不牢固. 所以打算写这么一篇学习笔记, 讲讲左偏树和非旋转treap. 左偏树 定义 左偏树(Lefti ...
- :jQuery实例【DEMO】
前言: 今天2月最后一天,写一篇jQuery的几个实例,算是之前前端知识的应用.写完这篇博客会做一个登陆界面+后台管理(i try...) 一.菜单实例 最开始的界面: 点击菜单三后的界面: 二. ...
- uitableview执行deleteRowsAtIndexPaths时出错
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid updat ...
- [__NSCFConstantString size]: unrecognized selector sent to instance 错误
因为使用时候的类型和初始化的对象类型不匹配造成的,例如 - (NSMutableDictionary *)getMenuItems{ NSArray *defaultTmp = [NSArray ...
- [UIDevice currentDevice]
获取iphone的系统信息使用[UIDevice currentDevice],信息例如以下: [[UIDevice currentDevice] systemName]:系统名称,如iPhone O ...