【全国互虐】Fibonacci矩阵
orz啊又被屠了 人生如此艰难
题意:
给定一个k维的n^k的超立方体 超立方体的元素Ai1,i2,...,ik 的值为f(i1+i2+...+ik-k+1) f为斐波那契数列
求该超立方体的所有元素和
1<=n,k<=10^9
题解:
其实看到数据范围 就大概猜到是矩阵乘法了
但是我考试的时候想了半天还是不知道矩阵乘法怎么搞 - -
其实矩阵乘法比我想象中的厉害多了
这里有个性质 做完一维后 可以把这维压缩成一个点 用这维的和代替
并且压缩后下一维还是满足斐波那契的性质所以可以用同一个矩阵继续乘
那么把开始的[f[1],f[2],sum[1]] 改为[sum[n],sum[n]-f[1]+f[n+1],sum[n]] 继续快速幂即可
但是这样做的时间复杂度是O(klogn)的
其实上面的将[f[1],f[2],sum[1]] 改为[sum[n],sum[n]-f[1]+f[n+1],sum[n]]也是能用矩阵表示出来的orz
具体自己yy下 这样就能求出从这维转到下一维的矩阵是什么样的 这个矩阵的k次方就能求出答案
时间复杂度O(log(nk))
代码
#include <cstdio>
#include <cstring>
typedef long long ll;
struct info{
ll n,m;
ll a[][];
}save,jz,one,st;
const ll mo=;
ll t,n,m;
inline info operator*(info a,info b){
info res;
res.n=a.n,res.m=b.m;
for (ll i=;i<res.n;i++)
for (ll j=;j<res.m;j++){
res.a[i][j]=;
for (ll k=;k<a.m;k++) res.a[i][j]=(res.a[i][j]+a.a[i][k]*b.a[k][j]%mo)%mo;
}
return res;
}
void makeinfo(){
memset(st.a,,sizeof(st.a));
memset(one.a,,sizeof(one.a));
memset(save.a,,sizeof(save.a));
st.n=,st.m=;
st.a[][]=,st.a[][]=,st.a[][]=;
one.n=one.m=save.n=save.m=;
one.a[][]=one.a[][]=one.a[][]=;
save.a[][]=save.a[][]=save.a[][]=save.a[][]=save.a[][]=;
}
info mi(info a,ll b){
info res=one;
for (;b;b>>=){
if (b&) res=res*a;
a=a*a;
}
return res;
}
int main(){
freopen("fibonacci.in","r",stdin);
freopen("fibonacci.out","w",stdout);
scanf("%I64d",&t);
makeinfo();
for (;t;t--){
scanf("%I64d%I64d",&n,&m);
jz=mi(save,n-);
jz.a[][]=jz.a[][]+jz.a[][]-;
jz.a[][]=jz.a[][]+jz.a[][];
jz.a[][]=jz.a[][]+jz.a[][];
jz.a[][]=jz.a[][];
jz.a[][]=jz.a[][];
jz.a[][]=jz.a[][];
jz=mi(jz,m);
jz=st*jz;
printf("%I64d\n",jz.a[][]);
}
fclose(stdin);
fclose(stdout);
}
【全国互虐】Fibonacci矩阵的更多相关文章
- hdu 1588(Fibonacci矩阵求和)
题目的大意就是求等差数列对应的Fibonacci数值的和,容易知道Fibonacci对应的矩阵为[1,1,1,0],因为题目中f[0]=0,f[1]=1,所以推出最后结果f[n]=(A^n-1).a, ...
- BZOJ3286 Fibonacci矩阵 矩阵 快速幂 卡常
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3286 题意概括 n,m,a,b,c,d,e,f<=10^1000000 题解 神奇的卡常题目 ...
- POJ3070 Fibonacci[矩阵乘法]
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- poj 3070 Fibonacci (矩阵快速幂乘/模板)
题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...
- poj 3070 Fibonacci 矩阵快速幂
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- HDU 3306 Another kind of Fibonacci(矩阵+ll超时必须用int&输入必须取模&M必须是int类型)
Another kind of Fibonacci [题目链接]Another kind of Fibonacci [题目类型]矩阵+ll超时必须用int&输入必须取模&M必须是int ...
- POJ3070 Fibonacci[矩阵乘法]【学习笔记】
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- HDU 1588 Gauss Fibonacci(矩阵快速幂)
Gauss Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU1588-Gauss Fibonacci(矩阵高速幂+等比数列二分求和)
题目链接 题意:g(x) = k * x + b.f(x) 为Fibonacci数列.求f(g(x)),从x = 1到n的数字之和sum.并对m取模. 思路: 设A = |(1, 1),(1, 0) ...
随机推荐
- bzoj4518
好久没写题解了…… 一开始脑抽,还以为平均数会随着划分的改变而改变(无可救药……) 这题还是比较水的,展开方差的式子分成m部分每部分路程为xi,平均数p 方差=∑(xi-p)/m=∑(xi^2-2xi ...
- kafka_2.9.2-0.8.1.1分布式集群搭建代码开发实例
准备3台虚拟机, 系统是RHEL64服务版. 1) 每台机器配置如下:$ cat /etc/hosts # zookeeper hostnames: 192.168.8.182 ...
- HDU 1251 统计难题【字典树】
题意:中文题--跟着模板敲的--第一棵字典树--@_@ #include<iostream> #include<cstdio> #include<cstring> ...
- centos 升级php、mysql(webtatic)
1)定义使用webtatic源 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm (ps: ...
- iso中第三方框架SDWebImage的使用步骤
一.SDWebImage的使用 1.依赖的框架 * ImageIO.framework * MapKit.framework 2.UIImageView下载图片需要的头文件:UIImageView+W ...
- toB的产品经理和toc产品经理区别
腾讯产品经理现身说法 曾经在UC做过2年to c的app,现在在腾讯做to b的产品. 做to c产品的时候,我很瞧不起做to b产品的同学,认为他们不过是做支撑的. 后来,我参与了一个to b平台级 ...
- 理解matplotlib绘图
matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化 ...
- IOS设计模式之二(门面模式,装饰器模式)
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
- POJ 2249 Binomial Showdown
// n 个 数 取 k个数的取法// C(n,k) 注意些细节#include <iostream> #include <string> #include<sstrea ...
- oracle----sqlldr用法
SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中.SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PAR ...