HDU 2855 (矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855
题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$
解题思路:
题目挺吓人的。先把完整组合数+Fibonacci展开来。
利用Fibonacci的特性,从第一项开始消啊消,消到只有一个数:
$S(0)=f(0)$
$S(1)=f(2)$
$S(2)=f(4)$
$S(n)=f(2*n)$
这样矩阵快速幂就可以了,特判$n=0$时的情况。
快速幂矩阵
$\begin{bmatrix}f1 & f0 \\ 0 & 0\end{bmatrix}\begin{bmatrix}1 & 1 \\1 & 0 \end{bmatrix}=\begin{bmatrix}f2 & f1 \\
0 & 0\end{bmatrix}$
代码
#include "cstdio"
#include "cstring"
#define LL long long
#define mod m
#define K 2
LL n,m;
struct Matrix
{
LL mat[K][K];
Matrix() {memset(mat,,sizeof(mat));}
Matrix(LL *val)
{
int idx=;
for(int i=;i<K;i++)
for(int j=;j<K;j++)
mat[i][j]=val[idx++];
}
};
Matrix operator * (Matrix a,Matrix b)
{
Matrix ret;
for(int i=;i<K;i++)
for(int j=;j<K;j++)
{
ret.mat[i][j]=;
for(int k=;k<K;k++)
ret.mat[i][j]+=((a.mat[i][k]*b.mat[k][j])%mod);
}
return ret;
}
Matrix operator ^ (Matrix a,LL n)
{
Matrix ret,base=a;
for(int i=;i<K;i++) ret.mat[i][i]=;
while(n)
{
if(n&) ret=ret*base;
base=base*base;
n>>=;
}
return ret;
}
int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%I64d%I64d",&n,&m);
if(n==) printf("0\n");
else
{
LL obj=n*;
LL bval[]={,,,};
LL pval[]={,,,};
Matrix Base(bval),Pow(pval),ans=Pow^(obj-);
ans=Base*ans;
printf("%I64d\n",ans.mat[][]%mod);
}
}
}
HDU 2855 (矩阵快速幂)的更多相关文章
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
- HDU - 1575——矩阵快速幂问题
HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n( ...
- hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...
- 随手练——HDU 5015 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...
- HDU 3802 矩阵快速幂 化简递推式子 加一点点二次剩余知识
求$G(a,b,n,p) = (a^{\frac {p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)[(\sqrt{a} + \sqrt{b})^{2F_n} + (\sqrt{a} ...
- How many ways?? HDU - 2157 矩阵快速幂
题目描述 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的 ...
- HDU 5950 矩阵快速幂
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 1757 矩阵快速幂 **
一看正确率这么高,以为是水题可以爽一发,结果是没怎么用过的矩阵快速幂,233 题解链接:点我 #include<iostream> #include<cstring> ; us ...
- HDU 4686 矩阵快速幂 Arc of Dream
由式子的性质发现都是线性的,考虑构造矩阵,先有式子,a[i] = ax * a[i-1] + ay; b[i] = bx*b[i-1] +by; a[i]*b[i] = ax*bx*a[i-1]*b[ ...
随机推荐
- hdu 1711Number Sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 数字KMP,原来还能这么用 #include<stdio.h> ],b[]; ]; ...
- php 租房子练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java集合源码学习(一)集合框架概览
>>集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Array ...
- 分享一个最近研究的手机QQ3.0的协议(版本1.4)
最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0, 所用到的TCP ...
- html5 基本布局+新标签+新选择器 + 线性渐变
html5 基本布局+新标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- Win10 UI线程
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => UpdateButtonOrientation());
- hdu 5291 dp+优化 ****
多校实在高能 题解链接 题意:有n中糖果,每种糖果有ai个.分给A,B两个人.两人的糖果要一样多,可以都是0,1......m个.同一种糖果没有区别. 问有几种分法. 定义dp[i]表示两人之间相差i ...
- JSP/Servlet的编码原理
转自:http://janwer.iteye.com/blog/150226 首先,说说 JSP/Servlet 中的几个编码的作用 在 JSP/Servlet 中主要有以下几种设置编码的方式: pa ...
- git分支使用
1.查看远程服务器分支 git branch -a 2.查看本地分支 git branch 3.切换分支 git checkout master 4.删除远程分支 git push origin :b ...
- 信号量互斥,王明学learn
信号量互斥 信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥).进程可以根据它判定是否能够访问某些共享资源.除了用于访问控制外,还可用于进程同步. 一.信号量分类 ...