hihocoder #1143 : 骨牌覆盖问题·一

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题:
我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢?
举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:

提示:骨牌覆盖

提示:如何快速计算结果

输入

第1行:1个整数N。表示棋盘长度。1≤N≤100,000,000

输出

第1行:1个整数,表示覆盖方案数 MOD 19999997

样例输入
62247088
样例输出
17748018

分析:n超大,如果按照递推计算斐波那契第n项相当费时间,线性代数的矩阵有加速运算的效果。

此代码基本可以算作模板,但需要注意一个地方,在上面的这道题目中,f[1]=1,f[2]=2,,,以此类推下去。
但有的序列可能是:1 1 2 3,,,因为有一点不同就需要稍微修改一下矩阵累乘的次数,也就是矩阵的指数。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <math.h>
#define eps 1e-8
#include <algorithm> using namespace std; //矩阵快速幂运算(矩阵加速运算) struct matrix{
long long a[2][2]; //定义2x2的矩阵
}; matrix mul(matrix x, matrix y, long mod )
{
matrix ret; //按照矩阵相乘求ret矩阵的每个元素的值 然后返回它
ret.a[0][0]=((x.a[0][0]%mod)*y.a[0][0]%mod + (x.a[0][1]%mod)*y.a[1][0]%mod )%mod;
ret.a[0][1]=((x.a[0][0]%mod)*y.a[0][1]%mod + (x.a[0][1]%mod)*y.a[1][1]%mod )%mod;
ret.a[1][0]=((x.a[1][0]%mod)*y.a[0][0]%mod + (x.a[1][1]%mod)*y.a[1][0]%mod )%mod;
ret.a[1][1]=((x.a[1][0]%mod)*y.a[0][1]%mod + (x.a[1][1]%mod)*y.a[1][1]%mod )%mod;
return ret;
} //求矩阵x的幂取模,e为指数
matrix mypow(matrix x, long long e, long mod)//(x^e)%mod
{
matrix ret, temp;
if(e==0){
ret.a[0][0]=1; ret.a[0][1]=0;
ret.a[1][0]=0; ret.a[1][1]=1;
return ret;
}
if(e==1) return x; //当指数为1时,返回原来的矩阵 temp=mypow(x, e>>1, mod); //x的 e/2次方
ret=mul(temp, temp, mod); //ret=temp*temp
if(e&1) ret=mul(ret, x, mod); //如果e为奇数,ret乘以x return ret; //返回答案
} int main()
{
long n, m=19999997;//m就是mod
matrix ans; while(scanf("%ld", &n)!=EOF)
{
//矩阵初始化
ans.a[0][0]=1; ans.a[0][1]=1;
ans.a[1][0]=1; ans.a[1][1]=0; if( n ){
ans = mypow(ans, n, m); //此处的n就是指数(考虑n是否在对应的题目中需要修改), m是取模数
printf("%lld\n", ans.a[0][0]);
}else{
printf("0\n");
}
}
return 0;
}

斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】的更多相关文章

  1. 51nod 1242 斐波那契数列的第N项——数学、矩阵快速幂

    普通算法肯定T了,所以怎么算呢?和矩阵有啥关系呢? 打数学符号太费时,就手写了: 所以求Fib(n)就是求矩阵  |  1  1  |n-1  第一行第一列的元素. |  1  0  | 其实学过线代 ...

  2. HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  3. HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  4. [HDU 4549] M斐波那契数列

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  5. hdu4549 M斐波那契数列 矩阵快速幂+快速幂

    M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的 ...

  6. M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  7. hdu 4549 M斐波那契数列 矩阵快速幂+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Problem ...

  8. HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submi ...

  9. NYOJ 1000 又见斐波那契数列

    描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[ ...

随机推荐

  1. asp.net core mvc视频A:笔记3-1.视图基本用法

    常用介绍 注意:ViewBag是对View的封装,所以如果两者键值(Key)是一样的话,后者会覆盖前者. 新建项目,添加空控制器 小技巧-快速添加视图 控制器方法,使用ViewData和ViewBag ...

  2. Https所涉及名词及相关后缀名解释

    HTTPS: HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即 ...

  3. centos7 重启网卡报错

    systemctl restart network 时候报错: rtnetlink answers file exists 是network和NetworkManager冲突了 一般建议直接 syst ...

  4. 如何去掉MapReduce输出的默认分隔符

    我们在用MapReduce做数据处理的时候,经常会遇到将只需要输出键或者值的情况,如context.write(new Text(record), new Text("")),这样 ...

  5. rplidar 扫描角度设置

    参考网站::   https://blog.csdn.net/sunyoop/article/details/78302090 https://blog.csdn.net/dzhongjie/arti ...

  6. laravel数据库——迁移

    1.简介 迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和Laravel的结构构建器结对从而可以很容易地构建应用的数据库表结构. Laravel的Schema门面提 ...

  7. cocos2d-x 3.0 Android环境搭建(亲測通过)

    网上一大堆讲述coco2d-x 3.0 版本号的android环境搭建.真是不忍直視.讲的不清不楚,真是不知道他们自己有没有測试过.今天正好忙完项目有点时间去部署了下android环境. cocos2 ...

  8. java.lang.NoClassDefFoundError: ch/qos/logback/core/joran/spi/JoranException

    问题描述:启动tomcat服务器的时候,报找不到JoranException类的异常 原因:tomcat中没有logback-core-1.1.2.jar包 解决方法:在tomcat中的lib目录添加 ...

  9. cp 命令 简要

    1.cp   1.log   hanDir   将1.log复制到hanDir目录中 2.cp   1.log  -i   hanDir   复制前询问是否覆盖重名文件 3.cp  -a    han ...

  10. VSCode 运行go test显示打印日志

    在VSCode中运行go test,在代码中写的 fmt.Printf("TestB \n") 这些语句均不打印,只显示最终的结果 PASS ok github.com/B .03 ...