传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=200

试题描述:

地球人都知道Fibonicca数列:

1 1 2 3 5 8 -----

输入两个正整数L,R,输出Fibonicca数列第L项加到第R项的结果,因为答案可能很大,请输出答案的后7位(不保留前导零)。

输入:

第一行为两个正整数L,R.

输出:

输出答案的后7位(不保留前导零)

输入示例:

1 5

输出示例:

12

其他说明:

60%数据: 1<=L<=R<=1000000
100%数据: 1<=L<=R<=2^31-1
其中20%数据保证L=R

题解:前缀和思想:f(L,R)=f(1,R)-f(1,L),然后变成裸矩阵乘。

                                            [0 , 1 , 0]

[f(n-2),f(n-1),S(n-2)] * [1 , 1 , 1] = [f(n-1),f(n),S(n-1)]

                                            [0 , 0 , 1]

注意n=1,2特判。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=;
struct Matrix{
long long A[][];
Matrix(){memset(A,,sizeof(A));}
};
void print(Matrix M){
for(int i=;i<;i++){
for(int j=;j<;j++) printf("%d ",M.A[i][j]);
puts("");
}puts("");return;
}
Matrix mul(Matrix a,Matrix b){
Matrix ans;
for(int i=;i<;i++)
for(int j=;j<;j++){
for(int k=;k<;k++) ans.A[i][j]+=a.A[i][k]*b.A[k][j];
ans.A[i][j]%=mod;
}
return ans;
}
Matrix pow(Matrix a,int n){
Matrix ans=a,tmp=a;n--;
while(n){
if(n&) ans=mul(ans,tmp);
tmp=mul(tmp,tmp);
n>>=;
} return ans;
}
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') sig=-;ch=getchar();}
while(isdigit(ch)) x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;} if(x<) putchar('-'),x=-x;
int len=,buf[]; while(x) buf[len++]=x%,x/=;
for(int i=len-;i>=;i--) putchar(buf[i]+'');return;
}
int initn[][]={
{,,},
{,,},
{,,}
};
int solve(int n){
if(n==) return ;
if(n==) return ;//真坑!
Matrix M;
for(int i=;i<;i++)
for(int j=;j<;j++)
M.A[i][j]=initn[i][j]; M=pow(M,n-);
//puts("here!");print(M);
return (M.A[][]+M.A[][])%mod;
} void init(){
return;
}
void work(){
int a=read(),b=read();
printf("%d\n",(solve(b)-solve(a-)+mod)%mod);
return;
}
void print(){
return;
}
int main(){
init();work();print();return ;
}

COJ 0200 Fibonacci的更多相关文章

  1. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  2. #26 fibonacci seqs

    Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...

  3. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  4. 斐波拉契数列(Fibonacci) 的python实现方式

    第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... >>> fibs = [0,1] >>&g ...

  5. fibonacci数列(五种)

    自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...

  6. POJ3070 Fibonacci[矩阵乘法]

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

  7. Fibonacci 数列算法分析

    /************************************************* * Fibonacci 数列算法分析 ****************************** ...

  8. 算法系列:Fibonacci

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  9. UVa #11582 Colossal Fibonacci Numbers!

    巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and  ...

随机推荐

  1. 1.1GTK+ 的简单程序HelloWorld

    1.1GTK+ 的简单程序HelloWorld 编译执行如图所看到的:

  2. InnoDB 数据表压缩原理与限制

    http://liuxin1982.blog.chinaunix.net/uid-24485075-id-3523032.html 压缩理念 通过提高CPU利用率和节约成本,降低数据库容量及I/O负载 ...

  3. JavaScript--execCommand指令集

    execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用 如下格式:document.execCommand(sCmd,交互方式, 动态参数) .其中:sCm ...

  4. Nginx报错:Sorry, the page you are looking for is currently unavailable. Please try again later.

    查看了进程, nginx, php-fpm都在运行, 排除程序错误, 那么就是配置的问题了. 一个可能的错误, 是由于配置中的 fastcgi_pass 配置错了 错误的配置如下 server { l ...

  5. ubuntu 安装eclipse

    安装步骤: 一.下载客户端: 解压放到,/opt/Java/eclipse目录下,解压方法参考上一篇文章<ubuntu 配置Java jdk> 二.打开eclipse: 打开终端,输入,c ...

  6. python文档字符串

    #coding=utf-8 #文档字符串def d(i,j): """这个函数实现了一个乘法运算. 函数会返回一个乘法运算的结果.""" k ...

  7. 使用Javascript限制文本框只允许输入数字

    很多时候需要用到限制文本框的数字输入,试过许多方法,都不太理想,遂决定自己实现一个来玩玩.曾经使用过的方法通过onkeydown事件来控制只允许数字: <input onkeydown=&quo ...

  8. Android开发手记(24) Log的使用及颜色的更改

    在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.本文 ...

  9. 花非花-记一次linux上运行时报找不到库函数错误

    简介: --->:表示依赖 exe ---> a.so ---> utility.so 问题描述: exe运行起来报a.so中的函数f未定义. 解决过程: 一·nm a.so nm ...

  10. c语言中3n+1溢出问题解决

    3n+1问题是一个简单有趣而又没有解决的数学问题.这个问题是由L. Collatz在1937年提出的.克拉兹问题(Collatz problem)也被叫做hailstone问题.3n+1问题.Hass ...