【HDU4471】Homework(矩阵快速幂)

题面

Vjudge

给定一个数列的前\(m\)项,给定一个和前\(t\)项相关的递推式。

有\(q\)个位置的递推式单独给出,求数列第\(n\)项。

题解

大部分的转移还是相同的,所以可以提前构建好矩阵,预处理转移矩阵的\(2^n\),

这样子可以在\(O(t^2logn)\)时间里面进行矩阵快速幂。

对于特殊点排序,特殊点的数值直接爆算,总的复杂度还是正确的。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MOD 1000000007
#define MAX 105
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct Matrix
{
int s[MAX][MAX],n,m;
int* operator[](int x){return s[x];}
void clear(){memset(s,0,sizeof(s));}
void init(){clear();for(int i=1;i<=n;++i)s[i][i]=1;}
}A[35],F;
int n,m,q,t,c[MAX],f[MAX];
int N,T,C[MAX],mt;
Matrix operator*(Matrix a,Matrix b)
{
Matrix ret;ret.clear();
ret.n=a.n;ret.m=b.m;
for(int i=1;i<=a.n;++i)
for(int j=1;j<=b.m;++j)
for(int k=1;k<=a.m;++k)
ret[i][j]=(ret[i][j]+1ll*a[i][k]*b[k][j])%MOD;
return ret;
}
void pre()
{
A[0].clear();A[0].n=A[0].m=mt;
for(int j=1;j<=A[0].n-1;++j)A[0][j][j+1]=1;
for(int i=1;i<=t;++i)A[0][i][1]=c[i-1];
for(int i=1;(1<<i)<=n;++i)A[i]=A[i-1]*A[i-1];
}
void preF()
{
F.clear();F.n=1;F.m=mt;
for(int i=1,j=m;i<=mt&&j;++i,--j)F[1][i]=f[j];
}
void fpow(int b)
{
for(int i=0;i<32;++i)
if(b&(1<<i))
F=F*A[i];
return;
}
struct Spe{int N,T,C[MAX];}p[MAX];
bool operator<(Spe a,Spe b){return a.N<b.N;}
int main()
{
int TT=0;
while(scanf("%d%d%d",&n,&m,&q)!=EOF)
{
for(int i=1;i<=m;++i)f[i]=read();
mt=t=read();for(int i=0;i<t;++i)c[i]=read();
for(int i=1;i<=q;++i)
{
p[i].N=read();p[i].T=read();
if(p[i].N<=n)mt=max(mt,p[i].T);
for(int j=1;j<=p[i].T;++j)p[i].C[j]=read();
}
sort(&p[1],&p[q+1]);
pre();preF();
int now=m;
for(int i=1;i<=q;++i)
{
if(p[i].N<=now||p[i].N>n)continue;
int N=p[i].N,T=p[i].T;
for(int j=1;j<=T;++j)C[j]=p[i].C[j];
fpow(N-now-1);now=N;int ff=0;
for(int j=1;j<=T;++j)ff=(ff+1ll*C[j]*F[1][j])%MOD;
for(int j=mt;j>1;--j)F[1][j]=F[1][j-1];F[1][1]=ff;
}
fpow(n-now);printf("Case %d: %d\n",++TT,F[1][1]);
}
return 0;
}

【HDU4471】Homework(矩阵快速幂)的更多相关文章

  1. HDU 4471 矩阵快速幂 Homework

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...

  2. BestCoder Round #29——A--GTY's math problem(快速幂(对数法))、B--GTY's birthday gift(矩阵快速幂)

    GTY's math problem Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  3. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  4. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  5. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  6. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  7. HDU5950(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...

  8. 51nod 1126 矩阵快速幂 水

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  9. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

随机推荐

  1. python基础——字符串

    Python的核心数据类型--字符串 常见字符串常量和表达式 操作 解释 s = '' 空字符串 s = "dodo's" 双引号和单引号 s = 'd\no\p\td\x00o' ...

  2. selenium自动化之稳定版本环境介绍

    大家都知道,目前selenium版本已经升级到3.0了,selenium3只是在selenium2的基础上做了一些调整,最明显的区别就是 selenium2对Firefox的支持最高只支持46及以下版 ...

  3. phpcms v9手机站不支持组图($pictureurls)的修改

    phpcms v9自带的手机门户网站,有时候我们需要用到组图功能$pictureurls,我在做的时候发现,如果$pictureurls中只有一张图片会正常显示,但是如果有两张或两张以上的图片的时候, ...

  4. 性能度量RMSE

    回归问题的典型性能度量是均方根误差(RMSE:Root Mean Square Error).如下公式. m为是你计算RMSE的数据集中instance的数量. x(i)是第i个实例的特征值向量 ,y ...

  5. Fulfilling Work: The Shippers More entrepreneurs hire 'fulfillment' outfits to store and ship their products

    By Stu Woo June 23, 2011 Brett Teper faced a logistical problem when he and a partner founded ModPro ...

  6. loadrunner之analysis详解

    本文原出处:http://blog.csdn.net/lykangjia/article/details/56009750 一.常用到的性能测试术语 1.事务(Transaction) 在web性能测 ...

  7. php作用域限定符

    双冒号::被认为是作用域限定操作符,用来指定类中不同的作用域级别.::左边表示的是作用域,右边表示的是访问的成员. 系统定义了两个作用域,self和parent.self表示当前类的作用域,在类之外的 ...

  8. 2018软工实践—Alpha冲刺(3)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助后端界面的开发 搭建项目运行的服务器环境 ...

  9. 11月14号站立会议(从即日14号起到24号截至为final阶段工作期)

    小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 代码地址:HTTPS:https://git.coding.net/shenbaishan/GIFT. ...

  10. PAT 甲级 1027 Colors in Mars

    https://pintia.cn/problem-sets/994805342720868352/problems/994805470349344768 People in Mars represe ...