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矩阵的更多相关文章

  1. hdu 1588(Fibonacci矩阵求和)

    题目的大意就是求等差数列对应的Fibonacci数值的和,容易知道Fibonacci对应的矩阵为[1,1,1,0],因为题目中f[0]=0,f[1]=1,所以推出最后结果f[n]=(A^n-1).a, ...

  2. BZOJ3286 Fibonacci矩阵 矩阵 快速幂 卡常

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3286 题意概括 n,m,a,b,c,d,e,f<=10^1000000 题解 神奇的卡常题目 ...

  3. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  4. poj 3070 Fibonacci (矩阵快速幂乘/模板)

    题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...

  5. poj 3070 Fibonacci 矩阵快速幂

    Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...

  6. HDU 3306 Another kind of Fibonacci(矩阵+ll超时必须用int&输入必须取模&M必须是int类型)

    Another kind of Fibonacci [题目链接]Another kind of Fibonacci [题目类型]矩阵+ll超时必须用int&输入必须取模&M必须是int ...

  7. POJ3070 Fibonacci[矩阵乘法]【学习笔记】

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  8. HDU 1588 Gauss Fibonacci(矩阵快速幂)

    Gauss Fibonacci Time Limit: 3000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) ...

  9. HDU1588-Gauss Fibonacci(矩阵高速幂+等比数列二分求和)

    题目链接 题意:g(x) = k * x + b.f(x) 为Fibonacci数列.求f(g(x)),从x = 1到n的数字之和sum.并对m取模. 思路:  设A = |(1, 1),(1, 0) ...

随机推荐

  1. hdoj - 5202 Rikka with string (BestCoder Round #37 ($))

    http://acm.hdu.edu.cn/showproblem.php?pid=5202 字符串处理的题,要细心. 给定一个只包含小写字母和问号的字符串,让我们还原出本来的字符串,把问号替换成任意 ...

  2. Android Touch(4)我不知道的MotionEvent(*)

    1,MotionEvent的复制或构造 有时候可能要保存一个MotionEvent, 它的构造方法是匿名的,不能直接创建,对外提供的获取对象的接口是静态的obtain方法,可以从一个MotionEve ...

  3. BZOJ 1009 GT考试(ac自动机+矩阵DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1009 题意:给定一个长度为m的串s.有多少种长度为n的串不包含s? 思路:(1)将s插入 ...

  4. mongodb添加用户和认证

    Mongodb默认启动是不带认证,也没有账号,只要能连接上服务就可以对数据库进行各种操作,这样可不行.现在,我们得一步步开启使用用户和认证. 第一步,我们得定位到mongodb的安装目录.我本机的是C ...

  5. JAVA中封装JSONUtils工具类及使用

    在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...

  6. 【笨嘴拙舌WINDOWS】GDI对象之位图

    GDI对象在windows中可以描述成为一次绘画操作时可使用的抽象工具.包括(画笔.画刷.字体.区域.调色板.位图等) GDI对象里的对象概念和在编程领域中面向对象编程的对象概念是不一样的! GDI对 ...

  7. [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图

    新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...

  8. [转][TFS] 禁止默认允许多人签出和强制解除签入签出锁

    转自:http://blog.xieyc.com/tfs-disable-multiple-check-out-and-force-to-undo-locking/ | 小谢的小站 [TFS] 禁止默 ...

  9. LeetCode Count Primes 求素数个数(埃拉托色尼筛选法)

    题意:给一个数n,返回小于n的素数个数. 思路:设数字 k =from 2 to sqrt(n),那么对于每个k,从k2开始,在[2,n)范围内只要是k的倍数的都删掉(也就是说[k,k2)是不用理的, ...

  10. RBAC(Role-Based Access Control,基于角色的访问控制)

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...