Problem 2198 快来快来数一数

Accept: 218    Submit: 704
Time Limit: 1000 mSec    Memory Limit : 65536 KB

 Problem Description

n个六边形排成一行,相邻两个六边形共用一条边,如下图所示:

记这个图形的生成树个数为t(n)(由于每条边都是不同的,不存在同构的问题)。那么t(1)=6,t(2)=35……

给出n,求mod 1000000007

 Input

第一行给出数据组数T。

之后每一行给出一个正整数n。

T大约为50000,n<=10^18。

 Output

每组数据输出一行答案。

 Sample Input

2
2
12345678987654321

 Sample Output

4
1733521876

 Source

FOJ有奖月赛-2015年10月

思路:

暴力打表得到四项,6 35 204 1189.

不难看出,F【i】=F【i-1】*6-F【i-2】;

那么构造矩阵为:

然后跑矩阵快速幂即可。

然而直接跑会TLE,在网上题解找到了一种优化常数的方法(极限数据其实还是会卡掉这种做法的。)

先预处理出64个乘方矩阵,然后对于n来讲,如果某一位为1的时候再向上乘一个乘方矩阵。

Ac代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define ll __int64
typedef struct Matrix
{ll mat[3][3];
}matrix;
ll mod=1e9+7;
matrix A,B,Tmp[75];
Matrix matrix_mul(matrix a,matrix b)
{matrix c;memset(c.mat,0,sizeof(c.mat));int i,j,k;for(int i=0;i<3;i++){for(int k=0;k<3;k++){if(a.mat[i][k]==0)continue;for(int j=0;j<3;j++){c.mat[i][j]=(c.mat[i][j]+((a.mat[i][k]*b.mat[k][j]))+mod)%mod;}}}return c;
}
Matrix matrix_quick_power(matrix a,ll k)
{matrix b;memset(b.mat,0,sizeof(b.mat));for(int i=0;i<3;i++)b.mat[i][i]=1;//单位矩阵bwhile(k){if(k&1){b=matrix_mul(a,b);k-=1;}else{a=matrix_mul(a,a);k/=2;}}return b;
}
void init()
{A.mat[0][0]=6;A.mat[0][1]=-1;A.mat[0][2]=0;A.mat[1][0]=1;A.mat[1][1]=0;A.mat[1][2]=0;A.mat[2][0]=6;A.mat[2][1]=-1;A.mat[2][2]=1;Tmp[1]=A;for(int i=2;i<=64;i++){Tmp[i]=matrix_mul(Tmp[i-1],Tmp[i-1]);}
}
int main()
{int t;init();scanf("%d",&t);while(t--){ll n;scanf("%I64d",&n);memset(B.mat,0,sizeof(B.mat));for(int i=0;i<3;i++)B.mat[i][i]=1;int i=1;while(n){if(n&1){B=matrix_mul(B,Tmp[i]);}n/=2;i++;}printf("%I64d\n",(B.mat[2][0]+mod)%mod);}return 0;
}

Fzu 2198 快来快来数一数【矩阵快速幂】相关推荐

  1. 数绵羊(矩阵快速幂)

    问题描述 一个数:1234567891011121314151617181920-,数到了N,那么形成的这个数字除以1000000007的余数是多少呢? 输入描述 一行,一个整数N,如题目描述 输出描 ...

  2. foj2198 Problem 2198 快来快来数一数 dp 矩阵快速幂

    Problem 2198 快来快来数一数 Accept: 67 Submit: 194 Time Limit: 1000 mSec Memory Limit : 65536 KB Problem De ...

  3. 2015多校10 1006.CRB and Puzzle HDU5411(邻接矩阵求k长路条数,矩阵快速幂

    题意:有若干字符,现在要把它们连成一个字符串,每种字符后面只能接特定种类的字符,现在询问能连接出的长度小于等于m的字符串有多少种. 思路:我们可以把这个转移关系看成一个图,如果字符a后面可以接b,那么 ...

  4. leetcode509. 斐波那契数(矩阵快速幂)

    斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,   F(1) = 1 F(N) = F( ...

  5. 牛客练习赛27 F-计数(状压+限制初末状态的矩阵快速幂)

    传送门 假如不是环,很简单 定义f[i][j]f[i][j]f[i][j]枚举到第iii个数字最后五个数字状态是jjj 那么显然可以矩阵快速幂求解 初始矩阵aaa是111行(1<<m)−1 ...

  6. [蓝桥杯][算法训练VIP]麦森数(Java大数+快速幂)

    题目描述 形如2p-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2p-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...

  7. 【codevs1087NOIP2003】麦森数,高精度+对数+快速幂

    麦森数 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 形如2P-1的素数称为麦森数,这时P ...

  8. FZU 2198 快来快来数一数(矩阵快速幂)

    /* a[i]=6*a[i-1]-a[i]+1;矩阵快速幂+预处理vc++可过.... */ # include <stdio.h> # include <algorithm> ...

  9. FZU 1683 纪念SlingShot (简单的矩阵快速幂)

     纪念SlingShot Description 已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给 ...

最新文章

  1. 45个案例一一破解win32k.sys蓝屏
  2. css在线留言星号,使用CSS 给表单必选项添加星号的实现方法
  3. MySQL的explain简书_MySQL Explain
  4. java 短链接实现方案_java利用百度短网址api实现URL长短互换工具类分享
  5. 图像融合亮度一致_重磅干货低光图像处理方案
  6. 关于Java中serialUID的序列化的问题
  7. 小程序读取云服务器,小程序读取云服务器
  8. 连载8:时域信号相乘相当于频域卷积
  9. 树莓派学习路程No.1 树莓派系统安装与登录 更换软件源 配置wifi
  10. Linux安装yum(最全依赖包)
  11. javascript 中时区知识的整理 UTC GMT
  12. z-buffer算法
  13. 微端游戏启动器launcher的制作(序篇)
  14. 随笔二——JavaScript脚本语言
  15. 小米usb测试软件,你还在用USB传文件?小米10系列USB详细测试——《小米10十大槽点》番外 图文版...
  16. 大数据云计算技术概述_云计算–概述,类型,优势和未来范围
  17. abaqus python_abaqus python脚本入门
  18. 排查Java宕机,weblogic宕机问题排查
  19. 在 Apple 芯片设备上用 Android Studio?别忘了使用 Apple 芯片预览版!
  20. 绘画语言的要素形状b节奏c立面d色彩,环境艺术设计理论考试题目资料.doc

热门文章

  1. 原声大碟 -《仙剑奇侠传三·电视原声带》[MP3]
  2. 从51网改版看互联网盈利方式
  3. 《Real-Time Rendering 4th Edition》全文翻译 - 第2章 图形渲染管线(上)2.1 ~ 2.3(20200720翻新)
  4. 映泰主板虚拟机AMD-V设置
  5. 物联网安全与隐私保护之物联网安全体系
  6. 现代密码学期末复习26问
  7. apache 配置http跳转https
  8. 1.javaSe常用类
  9. 一周一个小朋友系列——YOLOV1 paper Analysis
  10. 自我管理的29个工具