hdu 6030 矩阵快速幂
大致题意:
一条长度为n的项链,由红色珠子和蓝色珠子(分别用1和0表示)组成,在连续的素数子段中,红色珠子的个数不能少于蓝色珠子。问组成这个项链有多少种方案,求方案数模1000000007
分析:
首先我们看看边界情况n=2
01
10
11
有如上3种情况
再观察一下n=3的情况
011
101
111
110
这四个方案中有3种方案(011,101,111)有关联,n=2的情况再加一个1,结尾为1,那么肯定也有为结尾为0的情况。我们继续推测
n=4
0111
1011
1111
1101
0110
1110
前面四个,即n=3时再加一个1,后面两个是在n=1时加上110使结尾为0,但是n=1时0不应该是不满足条件吗。我们仔细看看题目,连续的素数子段,1并不是素数。
综上所述,加1或者加110。a(n)=a(n-1)+a(n-3)
初始状态是a2,不是a1
有了递推式,但是n又很大,所以我们得构造矩阵利用快速幂来求解。我们可以构造如下矩阵
a(n) a(n-1) a(n-2) = a(n-1) a(n-2) a(n-3) * 1 1 0
0 0 1
1 0 0
Mat=1 1 0
0 0 1
1 0 0
a(n) a(n-1) a(n-2) = a(4) a(3) a(2) * Mat^(n-4)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; const int N=3;
typedef long long ll;
const ll Mod=1000000000+7; struct Mat
{
ll mat[N+1][N+1];
};
Mat Multiply(Mat a, Mat b)
{
Mat c;
memset(c.mat, 0, sizeof(c.mat));
for(int k = 0; k < N; ++k)
for(int i = 0; i < N; ++i)
if(a.mat[i][k])
for(int j = 0; j < N; ++j)
if(b.mat[k][j])
c.mat[i][j] = (c.mat[i][j] +a.mat[i][k] * b.mat[k][j])%Mod;
return c;
} Mat QuickPower(Mat a, ll k)
{
Mat c;
memset(c.mat,0,sizeof(c.mat));
for(int i = 0; i < N; ++i)
c.mat[i][i]=1;
for(; k; k >>= 1)
{
if(k&1) c = Multiply(c,a);
a = Multiply(a,a);
}
return c;
} int main()
{
int T;
scanf("%d",&T);
ll a[]={0,2,3,4,6};
Mat A;
A.mat[0][0]=1,A.mat[0][1]=1,A.mat[0][2]=0;
A.mat[1][0]=0,A.mat[1][1]=0,A.mat[1][2]=1;
A.mat[2][0]=1,A.mat[2][1]=0,A.mat[2][2]=0;
while(T--)
{
ll n;
scanf("%I64d",&n);
if(n<=4)
{
printf("%I64d\n",a[n]);
continue;
}
Mat ans=QuickPower(A,n-4);
printf("%I64d\n",(a[4]*ans.mat[0][0]+a[3]*ans.mat[1][0]+a[2]*ans.mat[2][0])%Mod);
}
return 0;
}
hdu 6030 矩阵快速幂的更多相关文章
- HDU - 6030 矩阵快速幂 +多组输入快速幂板子
题意:一个项链用n个珠子构成,是一个条而不是一个环,由红和蓝两种颜色构成,要求以任意点为起点向后的素数个珠子中,保证红颜色的大于等于蓝颜色的,问你有多少种方案满足,范围:n(2≤n≤1018) 推导过 ...
- HDU 2855 (矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...
- 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 ...
随机推荐
- Docker创建镜像以及私有仓库
Docker的安装及镜像.容器的基本操作详见博客https://blog.51cto.com/11134648/2160257下面介绍Docker创建镜像和创建私有仓库的方法,详细如下: 创建镜像 创 ...
- 11.16-18 lsci、ipcs、ipcrm:清除ipc相关信息
lspci:显示所有PCI设备 lspci命令用来显示系统中的所有PCI总线设备或是连接到该总线上的所有设备. lspci命令的参数选项及说明 -v 显示详细信息 -vv 显示更详细的信 ...
- MyBatis 高级查询之多对多查询(十一)
高级查询之多对多查询 查询条件:根据玩家名,查询游戏信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据玩家名查询游戏 * @param name ...
- Angular环境搭建及简单体验
一.安装开发环境 npm install -g typescript npm install -g @angular/cli 二.创建hello-world项目 创建项目 ng new angular ...
- VUE3后台管理系统【路由鉴权】
前言: 在"VUE3后台管理系统[模板构建]"文章中,详细的介绍了我使用vue3.0和vite2.0构建的后台管理系统,虽然只是简单的一个后台管理系统,其中涉及的技术基本都覆盖了, ...
- MinkowskiEngine Miscellaneous Classes杂类
Miscellaneous Classes杂类 内核生成器 class MinkowskiEngine.KernelGenerator(kernel_size = -1,stride = 1,dila ...
- Timer定时器开发
Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...
- TensorRT Analysis Report分析报告
TensorRT Analysis Report 一.介绍 TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟.高吞吐率的部署推理.TensorRT可 ...
- OSPF-三张表+路由器角色+router-id
验证理论: 1.剖析OSPF的三张表:邻居表,拓扑表,路由表 dis ospf peer brief dis ospf lsdb dis ip routing-table protocol ospf ...
- 在python_request 中 nb-log 日志模块的使用,应用到项目实际使用
一.安装 pip install nb-log pycham 中安装: 二.基本使用 2.1 pycham中调整设置控制台日志打印出的颜色 2.2 设置完成后去掉console弹出的颜色设置 2.3 ...