【HDU4471】Homework(矩阵快速幂)
【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(矩阵快速幂)的更多相关文章
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
- 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 ...
- 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)
题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...
- 51nod 算法马拉松18 B 非010串 矩阵快速幂
非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...
- 51nod 1113 矩阵快速幂
题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 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 ...
- 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 输 ...
- hdu2604(递推,矩阵快速幂)
题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...
随机推荐
- 【xshell属性设置】如何修改xshell字体大小
1.周末在家,想搞一下学习,于是远程公司的电脑(我的移动硬盘在公司,里面有虚拟机及测试环境) 发现xshell界面字体太小,不方便看,于是研究了一下如何来设置xshell 的字体大小 2.点击左上角的 ...
- OpenCL入门:(一:Intel核心显卡OpenCL环境搭建)
组装的电脑没带独立显卡,用的是CPU自带的核显,型号是Intel HD Graphics 530,关于显卡是否可以使用OpenCL,可以下载GPU-Z软件查看. 本文在Windows 10 64位系统 ...
- python常用模块详解2
序列化模块补充: 1.json格式的限制,json格式的key必须是字符串数据类型 2.json格式的字符串必须是"" 如果数字是key,那么dump之后会强转成字符串数据类型 i ...
- xampp服务器搭建和使用
1.安装完XAMPP后会出现Apache端口被占用的问题,一下方法解决 错误信息如下: Error: Apache shutdown unexpectedly. 9:37:01 [Apache] T ...
- python程序设计——面向对象程序设计:属性
python 3.x 的属性 可以将属性设置为 可读,可修改,可删除 # 只读属性,不允许修改和删除 class Test: def __init__(self,value): self.__valu ...
- 在Office 365 的如何给管理员赋予查看所有人邮箱的权限的Powershell
连接至Office365 的Powershell Get-MsolUser -UserPrincipalName admin@***.partner.onmschina.cn //Get-MsolUs ...
- 苹果没放弃手写笔 这样的iPad你想要吗?
12 月 31 日,美国专利与商标局(The U.S. Patent and Trademark Office)当地时间周四批准了一项来自苹果的专利申请,该专利主要描述的是一种可以通过陀螺仪.无线通讯 ...
- 1.hive介绍及安装配置
1.Hive介绍 数据库OLTP 在线事务处理 数据仓库OLAP 在线分析处理 延迟高 类sql方式(HQL) 使用sql方式,用来读写,管理位于分布式存储系统上的大型数据集的数据仓库技术 hive是 ...
- Spark SQL、DataFrame和Dataset——转载
转载自: Spark SQL.DataFrame和Datase
- 关于jsonp跨域的 实现
1.实现原理 1.把接口写在 script标签的src 中 这个接口就可以访问(不会存在跨域问题 因为接口在浏览器地址栏是可以访问的 会返回json字符串); 2.直接写不可以 因为正常情 ...